4

他の ActionBar 項目のオーバーフロー メニュー ドロップダウン機能を複製しようとしています。この機能は環境から除外されていると思われるため、この機能の手動実装に取り​​組んでいます (UI の標準化を強制する可能性があります)。オーバーフローメニューをクリックしたときにドロップダウンリストに使用されるスタイル/スタイルアイテムを知っている人はいますか?

編集

オーバーフロー ボタンは、実際には変更されたスピナーです。スタイル情報はこちら。

<style name="Widget.Holo.Spinner" parent="Widget.Spinner.DropDown">
    <item name="android:background">@android:drawable/spinner_background_holo_dark</item>
    <item name="android:dropDownSelector">@android:drawable/list_selector_holo_dark</item>
    <item name="android:popupBackground">@android:drawable/menu_dropdown_panel_holo_dark</item>
    <item name="android:dropDownVerticalOffset">0dip</item>
    <item name="android:dropDownHorizontalOffset">0dip</item>
    <item name="android:dropDownWidth">wrap_content</item>
    <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>
    <item name="android:gravity">left|center_vertical</item>
</style>
4

2 に答える 2

2

これが私が一緒に石畳にしたもののまとめです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dropdownContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/leftBuffer"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <LinearLayout
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/actionbarDropdown"
            style="@style/Widget.ActionBarDropDown"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="@android:color/transparent"
            android:entries="@array/sortOptions" />

        <LinearLayout
            android:id="@+id/bottomBuffer"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/rightBuffer"
        android:layout_width="118px"
        android:layout_height="match_parent" />

</LinearLayout>

onClickをActionBarアイテムに追加すると、上記のレイアウトが子としてアクティビティルートViewGroupに追加され、ドロップダウンのように見えます。

ルートViewGroupからビューを削除するonClickを各バッファーに追加すると、フォーカスを移動しようとしたときにドロップダウンを「終了」することができます。

ドロップダウンのスタイリング情報は次のとおりです。

<item name="android:background">@drawable/menu_dropdown_panel_holo_light</item>
<item name="android:dropDownSelector">@drawable/list_selector_background</item>

各リストアイテムのレイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="48dp"
      android:textSize="17sp"
      android:gravity="right|center_vertical"
      style="?android:attr/dropDownItemStyle"
      android:ellipsize="marquee"
      android:id="@android:id/text1">    
</TextView>

これは、オーバーフロードロップダウンの機能の完全なコピーを提供しませんが、かなり近いです。この機能をより統合された方法で再現する方法を他の誰かが知っているなら、私は非常に興味があります!

于 2011-08-25T10:23:28.593 に答える
0

ActionBar に配置したシンプルなカスタム ビューを用意することで、これを実現します。

<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/action_starred"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    style="?android:attr/actionButtonStyle"
    android:src="@drawable/ic_action_star" />

次に、 aOnClickListenerを作成してアンカーをアクション ビューに設定onCreateOptionsMenu()する Fragment を追加するだけです。ListPopupWindowを介してアクションビューを見つけますgetActivity().findViewById(R.id.action_starred)

それだけです。ポップアップをモーダルに設定して、メニューのように動作させることができます。リスト項目として、 のようなものを使用できますandroid.R.layout.simple_dropdown_item_1line

この方法は、私のようにビューを配置しなくても、同様にうまく機能するはずActionBarです。

于 2011-08-26T16:09:15.480 に答える