web-dev-qa-db-ja.com

アクションバーにドロップダウンアイテムを追加する方法

Android Honeycombアプリケーションでは、ナビゲーションスタイルとしてTabsを使用しています。オーバーフローボタンの横に1つのアイテムを追加したいのですが、そのアイテムをドロップダウンリストにしたいので、ユーザーはそこでオプションを選択できますが、ナビゲーションに関連することはできません。 mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);を使用しているため、最も簡単な方法は何ですか

カスタムビューを使用せずに実行できますか?

82
Paulo Barros

最初のオプション:

menu/options.xml:

<item
    Android:icon="@drawable/ic_menu_sort"
    Android:showAsAction="ifRoom">
    <menu>
        <item
            Android:id="@+id/menuSortNewest"
            Android:title="Sort by newest" />
        <item
            Android:id="@+id/menuSortRating"
            Android:title="Sort by rating" />
    </menu>
</item>

2番目のオプション:

menu/options.xml:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:id="@+id/menuSort"
        Android:showAsAction="ifRoom"
        Android:actionLayout="@layout/action_sort"  />
</menu>

layout/action_sort.xml:

<Spinner xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@drawable/ic_menu_refresh"
    Android:entries="@array/order" />

メニューリソースのドキュメント- http://developer.Android.com/guide/topics/resources/menu-resource.html

219
fhucho

絶対に私がこれまでに見つけた最良かつ最も簡単な答えは、 ここ です。

基本的に、この場合、カスタムレイアウトは必要ありません。 actonViewClassを設定するだけです:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:yourapp="http://schemas.Android.com/apk/res-auto" >

  <item Android:id="@+id/spinner"
    yourapp:showAsAction="ifRoom"
    yourapp:actionViewClass="Android.widget.Spinner" /> <== this is all that's required
</menu>

そして、通常どおりonCreateOptionsMenuで処理します。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    MenuItem item = menu.findItem(R.id.spinner);
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); // get the spinner
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(onItemSelectedListener); 

これは、最もシンプルでクリーンなソリューションです。原作者であるFrançoisPoyerの功績。

33
Alen Siljak

ドロップダウンとしてのみ機能します

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <!--<item-->
    <!--Android:id="@+id/save_contact"-->
    <!--Android:icon="@drawable/edit_new"-->
    <!--Android:title="Save Contact"-->
    <!--app:showAsAction="never" />-->

    <item
        Android:id="@+id/send_money"
        Android:icon="@drawable/edit_new"
        Android:title="Send Money"
        app:showAsAction="never" />

    <item
        Android:id="@+id/request_money"
        Android:icon="@drawable/edit_new"
        Android:title="Request money"
        app:showAsAction="never" />

    <item
        Android:id="@+id/recharge"
        Android:icon="@drawable/edit_new"
        Android:title="Recharge"
        app:showAsAction="never" />
</menu>

内部フラグメント

setHasOptionsMenu(true)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.chat_details_menu, menu);


    super.onCreateOptionsMenu(menu, inflater);
}
0
Srishti Roy