ActionBarCompat菜单项未显示

4
这是我的 general.xml 文件。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
    <item 
        android:id="@+id/next" 
        android:title="Next" 
        android:visible="true" 
        android:enabled="true" 
        android:showAsAction="always" 
        android:orderInCategory="1">

    </item>
    <item 
        android:id="@+id/Previous"
        android:title="Previous" 
        android:visible="true" 
        android:enabled="true" 
        android:orderInCategory="2" 
        android:showAsAction="always">

    </item>
    <item android:id="@+id/star" 
        android:icon="@drawable/ic_action_important" 
        android:enabled="true" 
        android:orderInCategory="0" 
        android:showAsAction="always" 
        android:title="Star" 
        android:visible="true">
    </item>

</menu>

这是我的代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.general, menu);
    getSupportActionBar().setDisplayShowHomeEnabled(false);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#003f84")));
    return true;
}

现在我的问题是菜单项没有显示在操作栏中。我这里做错了什么吗?
1个回答

19

showAsAction 应该在不同的命名空间中 (yourapp 在下面的示例中)。

<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>

youapp只是一个指向命名空间http://schemas.android.com/apk/res-auto的命名空间标识符,可以更改为任何内容。SDK将自动将该命名空间映射到您的包名(请参见下面的更新日志)。

添加了对库中具有自定义属性的自定义视图的支持。 使用自定义属性的布局必须使用命名空间URI http://schemas.android.com/apk/res-auto而不是包含应用程序包名称的URI。此URI在构建时替换为特定于应用程序的URI。

这是必要的,以便能够正确地找到不在先前操作系统版本中可用但作为应用程序包的一部分的属性。来自文档的说明:

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


你的应用程序是指我的应用程序名称? - Adnan
不,这是您的命名空间标识符。只要它与其他命名空间标识符不同即可随意命名。重要的是命名空间 http://schemas.android.com/apk/res-auto - JRomero
+1 - 非常感谢!解决我的问题的部分是:“请注意,上面的showAsAction属性使用了标签中定义的自定义命名空间”。我正在从ABS迁移到ABC,而showAsAction被“android:”替换为自定义命名空间(如上所示的yourapp:)。一旦我切换到正确的命名空间,它终于在操作栏中显示了我的操作(图标):) - AgentKnopf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接