我将我的应用迁移到最新的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中的首选项被忽略?
答案 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框架。所以你必须使用自己的命名空间 作为支持库定义的所有属性的前缀。