78

在我的Android蜂窝应用程序中,我使用Tabs作为导航样式。我想在溢出按钮旁边添加一个项目,但我希望该项目是一个下拉列表,用户将能够在那里选择一个选项,但与导航无关。自从我使用以来最简单的方法是什么mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);如何在操作栏上添加下拉项目

是否可以在不使用自定义视图的情况下执行此操作?

+0

检查4链接:这些链接帮助您的http://fizzylogic.azurewebsites .net/2012/03/05/mono-for-android-by-action-bar/https://github.com/StylingAndroid/StylingActionBar https://github.com/StylingAndroid/BasicActionBar – Kumar

回答

206

第一种选择:

菜单/ 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> 

第二个选项:

菜单/ 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> 

布局/ 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

+1

这些子菜单是ag重复提示!为我节省了数小时的研究和工作,谢谢! – damaxxed

+0

很好的答案!顺便说一句,你也可以在子菜单中包含图标。 –

+5

如何响应微调器的点击? – gregm

28

绝对最好的,我发现迄今最简单的答案是here

基本上,在这种情况下不需要自定义布局。只需设置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的致谢。

+0

经过测试和认可。 –

0

这将作为下拉只有

<?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(真)

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


    super.onCreateOptionsMenu(menu, inflater); 
} 
相关问题