ActionBarCompat菜单项未显示

时间:2013-09-12 17:22:32

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

这是我的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 个答案:

答案 0 :(得分: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将替换为应用程序   特定的一个在建设时。

这是必要的,以便它可以正确地找到以前的OS版本中不可用的属性,而不是应用程序包的一部分。来自documentation的注释:

  

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