inflater忽略了操作栏按钮

时间:2015-01-08 19:43:02

标签: android

我使用自定义操作栏主题(实际上只是更改了颜色)并禁用主页图标(在主要活动中)。我有2个菜单项,我想要充气,并且“始终”在操作栏上。当我运行应用程序时,它们都被推入溢出状态。

我提到了这篇文章here并开始使用自定义命名空间,因为支持v7并且结果仍然相同。我想知道我使用自定义操作栏主题是否与它有关?

这是我的main_activity_actions.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:Velo="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/add_ride"
        android:title="@string/add_ride"
        android:icon="@drawable/ic_action_new"
        Velo:showAsAction="ifRoom"
        />

    <item android:id="@+id/action_settings"
        android:title="Settings"
        android:icon="@drawable/ic_action_overflow"
        Velo:showAsAction="ifRoom" />
</menu>

这是通常的样板充气器

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

不确定你们是否想看到其他任何东西,但请告诉我。

提前致谢

编辑:这很奇怪。我可以使用android:showAsAction="ifRoom"并在其上得到一个错误(下面的红线),然后忽略它并运行它可以按我想要的方式工作,但是如果我使用命名空间appname:showAsAction="ifRoom"它就不会工作。我的意思是我想以正确的方式做到这一点,但忽略这个错误是什么伤害?

2 个答案:

答案 0 :(得分:0)

如果您使用的是FragmentActivity,那么您没有使用AppCompat v7,它提供了API 7及更高版本的一致ActionBar。您可以继续使用android:showAsAction="ifRoom"并使用FragmentActivity,但您的菜单项只会显示在API 11或更高版本的设备上的操作栏中(这是ActionBar成为Android内置部分的时候)

另一种方法是切换到使用AppCompat(关于最新版本的blog post,v21,可能有助于阅读)并使用其ActionBarActivity。这将为您在API 11,API 11-20和API 21之前提供一致的操作栏体验(因为API 21在Action Bar的工作方式上发生了很大变化)。

答案 1 :(得分:0)

来自FragmentActivity文档:

  

注意:如果要实施包含操作的活动   另外,你应该使用ActionBarActivity类,这是一个   这个的子类,因此允许您在API级别上使用Fragment API   7岁及以上。

由于您希望自己的活动拥有一个ActionBar并且您说要获得v7支持,因此请扩展ActionBarActivity。然后,您需要使用AppCompat主题。

如果您想使用AppCompat以外的基本主题,则必须延长Activity并将minSdk更改为11或更高。

基本上,为了支持API 7,您需要坚持支持包中的AppCompat主题。