Android appcompat操作栏菜单项showAsAction不工作

Android appcompat操作栏菜单项showAsAction不工作,android,menu,android-actionbar,android-appcompat,Android,Menu,Android Actionbar,Android Appcompat,我有一个菜单项出现在android 4.x上,但没有出现在2.x上。这是我的menu.xml <?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/men

我有一个菜单项出现在android 4.x上,但没有出现在2.x上。这是我的menu.xml

<?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/menu_filter"
    android:title="Filter"
    app:showAsAction="always"/>  
</menu>

这是我的actionbar风格

<style name="style1_actionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="android:background">@color/blue_dark</item>
    <item name="android:textColor">@color/white</item>
    <item name="actionMenuTextAppearance">@color/white</item>
    <item name="background">@color/blue_dark</item>
</style>

@颜色/蓝色/深蓝色
@颜色/白色
@颜色/白色
@颜色/蓝色/深蓝色
有什么想法吗

编辑:删除双引号输入错误


可能是因为我只显示文本,没有图标吗?我被困在这里了。

如果你想让你的应用程序支持3.0以下的操作栏,你需要使用支持库中的app compact v7


还要检查一下

哦,谢谢你们的帮助,伙计们,但我还是设法弄明白了。这不是xml的问题,而是OnCreateOptions菜单函数的问题

我在用这个

new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu); 
而不是这个

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_wentry_editor, menu);
不完全确定为什么会这样,但确实如此。


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

    <item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      **yourapp**:showAsAction="ifRoom"  />
</menu>
请参阅文档

使用支持库中的XML属性


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

在我的例子中,我必须在OnCreateOptions菜单中添加几行

Android Studio不允许我在使用appCompat时使用Android:showAsAction=“ifRoom”

app:showAsAction=“ifRoom”不起作用,我顺利将其删除

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater  inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        for (int i = 0; i < menu.size(); i++) {
            menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        }
        return super.onCreateOptionsMenu(menu);
    }
@覆盖
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单,菜单);
对于(int i=0;i
在扩展AppCompact的活动中使用菜单,有必要在XML中导入应用程序上下文并使用它:

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

    <!-- "Mark Favorite", should appear as action button if possible -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

基本上,您需要做的是添加
xmlns:app=”http://schemas.android.com/apk/res-auto“
指向yout XML中的菜单元素,并使用以下格式的showAsAction
app:showAsAction=“ifRoom”


如果可能,这将在操作栏中显示图标。

您在
xmlns:app=“”处遇到错误http://schemas.android.com/apk/res-auto“”
。。。注意开头和结尾的两个双引号。。。它应该是
xmlns:app=”http://schemas.android.com/apk/res-auto“
。这可能是一个打字错误:-)老兄,我真的很兴奋,并认为这会解决它,但没有,即使是使用appcompat V7,我也会遇到同样的问题。请从xmlns:app=“””中删除(“)并重试。我已经解决了同样的问题。请看一下本教程,希望它能对您有所帮助。我觉得我在那里做的一切。这太令人沮丧了第一个不起作用的原因(使用getAppliction())是因为它将使用不使用AppCompat的应用程序上下文。当您使用activities getMenuInflator()时,它将使用AppCompat,并在其中使用您的应用程序命名空间。谢谢!这个是为我做的!