【问题标题】:ActionBarCompat menu item is not showing [duplicate]ActionBarCompat 菜单项未显示[重复]
【发布时间】:2013-09-13 02:07:28
【问题描述】:

这是我的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;
}

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

【问题讨论】:

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


    【解决方案1】:

    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 已替换为应用程序 在构建时指定一个。

    这是必要的,这样它才能正确地找到以前操作系统版本中不可用的属性,而是应用程序包的一部分。来自documentation的备注:

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

    【讨论】:

    • 你的应用就是我的应用名称?
    • 不,这是您的命名空间标识符。只要它对其他命名空间标识符是唯一的,它就可以被称为任何东西。重要的是命名空间http://schemas.android.com/apk/res-auto
    • +1 - 非常感谢!解决我的问题的部分:“请注意,上面的 showAsAction 属性使用标签中定义的自定义命名空间”我正在从 ABS 迁移到 ABC,并且 showAsAction 前面是“android:”而不是自定义命名空间(yourapp: 如上所述)。一旦我切换到正确的命名空间,它最终会在操作栏中显示我的操作(图标):)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多