AppCompat v21,MenuInflater和showAsAction菜单首选项

时间:2014-12-04 13:18:50

标签: android android-support-library android-menu android-appcompat

我将我的应用迁移到最新的v7支持库,并提供了材料设计支持。

我想在ActionBar显示一个简单的菜单。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/platformselect_button_settings"
        android:icon="@drawable/ic_action_settings"
        android:orderInCategory="1"
        android:showAsAction="always"
        android:title="@string/menu_settings"/>
</menu>

问题是showAsAction首选项被忽略,我要做的就是强制使用onCreateOptionsMenu方法中的首选项:

@Override
public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.platformselect_overflow_menu, menu);
    for(int i = 0;i<menu.size();i++){
        MenuItemCompat.setShowAsAction(menu.getItem(i), MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
    }
    return super.onCreateOptionsMenu(menu);
}

我做错了吗?为什么存储在XML中的首选项被忽略?

1 个答案:

答案 0 :(得分:5)

使用AppCompat时需要使用不同的命名空间。

试试这个:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/platformselect_button_settings"
        android:icon="@drawable/ic_action_settings"
        android:orderInCategory="1"
        app:showAsAction="always"
        android:title="@string/menu_settings"/>
</menu>

来自这里的文档: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

  

使用支持库中的XML属性   请注意   上面的showAsAction属性使用在中定义的自定义命名空间    标签。使用任何定义的XML属性时,这是必需的   支持库,因为这些属性不存在   旧设备上的Android框架。所以你必须使用自己的命名空间   作为支持库定义的所有属性的前缀。