3

シャーロックアクションアイテムをクリックしてリストドロップダウンを取得する方法。スピナーの作成に似ているはずです。しかし、選択したアイテムをアクションバーに表示したくないので、このアプローチには問題があります。アクションオーバーフローに似ている必要があります。これについては、何か助けていただけますか。よろしくお願いします。

4

1 に答える 1

3

メニュー項目のアクションレイアウトでSpinner(またはIcsSpinnerfor )を使用して、このような動作を作成できます。ActionBarSherlockちょっとしたトリックを使う必要がありますが、現在選択されているアイテムを非表示にします。

メニューxmlを作成します。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
          android:actionLayout="@layout/my_dropdown_action_layout"
          android:showAsAction="always"/>

含まれる場所res/layout-v14/my_dropdown_action_layout.xml(このバージョンはネイティブアクションバーに使用されます):

<?xml version="1.0" encoding="utf-8"?>
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:background="?attr/actionBarItemBackground"
             android:id="@+id/spinner"/>

含まれres/layout/my_dropdown_action_layout.xmlます(このバージョンはに使用されますActionBarSherlock):

<?xml version="1.0" encoding="utf-8"?>
<com.actionbarsherlock.internal.widget.IcsSpinner 
             xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:background="?attr/actionBarItemBackground"
             android:id="@+id/spinner"/>

IcsSpinnerドロップダウンスピナーを作成するには、を使用する必要があります。res/layout-v14/my_dropdown_action_layout.xmlデフォルトバージョン(で)のレイアウトを使用res/layout/すると、Android 2.xでは動作が異なります(スピナーはダイアログモードになります)。

次に、スピナーにデータを適切に入力する必要があります。Activity次のように、メニューを膨らませる場所を作成するだけです。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.my_menu, menu);
    MenuItem menuItem = menu.findItem(R.id.item1);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_layout, R.id.text, items);
    adapter.setDropDownViewResource(R.layout.list_item);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        // native ActionBar
        Spinner sp = (Spinner) menuItem.getActionView();
        sp.setAdapter(adapter);
    } else {
        // ActionBarSherlock
        IcsSpinner sp = (IcsSpinner) menuItem.getActionView();
        sp.setAdapter(adapter);
    }

    return super.onCreateOptionsMenu(menu);
}

次に、現在選択されているアイテムを非表示にするトリックがあります。レイアウトには次のres/layout/spinner_layout.xmlものが含まれます。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:background="@null">
    <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/text"
            android:visibility="invisible"/>
    <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/my_dropdown_icon"
            android:background="@null"/>
</FrameLayout>

このようにして、アイコンがメニュー項目として表示され、ドロップダウンメニューが表示されます。レイアウトにはID付きres/layout/list_item.xmlのaも含まれている必要があることに注意してください。TextViewR.id.text

ActionProviderまたは、アクションレイアウトの代わりに使用できる同様のアプローチを使用できます。

また、別の解決策は、ドロップダウンに似たカスタムウィジェットを作成することSpinnerです。

于 2013-01-02T13:58:38.093 に答える