Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有应用程序的项目:showAsAction未显示_Android_Android Menu - Fatal编程技术网

Android 带有应用程序的项目:showAsAction未显示

Android 带有应用程序的项目:showAsAction未显示,android,android-menu,Android,Android Menu,我不明白为什么代码错误且不兼容(AndroidStudio告诉我“应该使用app:showAsAction和appcompat库)代码 工程完美,但适当和兼容的版本,如 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/ac

我不明白为什么代码错误且不兼容(AndroidStudio告诉我“应该使用app:showAsAction和appcompat库)代码


工程完美,但适当和兼容的版本,如

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_search"
          android:title="@string/action_search"
          android:icon="@drawable/search"
          app:showAsAction="always" />
</menu>

根本不显示我的图标


我正在测试三星GT P5210(安卓版本4.4.2)和Nexus 7(4.4.4)

添加以下内容:

yourapp:showAsAction="ifRoom"
@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);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.action_search:
            openSearch();
            return true;
        case R.id.action_compose:
            composeMessage();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

android:showAsAction
例如:

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

并阅读更多内容

我刚刚重读了你的问题,发现你的问题完全相反(但我的一些旧答案仍然适用于你的问题),因此这里是更新的答案:

yourapp:showAsAction="ifRoom"
@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);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.action_search:
            openSearch();
            return true;
        case R.id.action_compose:
            composeMessage();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
更新: 您已经在gradle文件中导入了appcompat库,但您似乎只支持比API级别11或14更新的设备?如果是这种情况,lint检查会发现您已经通过gradle导入了appcompat库,并且它认为您应该使用
ActionBarActivity
,因为您导入了库。这就是为什么您需要这样做的原因获取错误。但是由于您的
android:showAsAction
属性正在工作,您正在使用本机
Activity
,并且本机属性调用是正确的,即使lint检查表明它是错误的。因此,如果要删除lint错误,您必须从gradle文件中删除appcompat库,并可能更改您的Activity t血红素到本地全息光主题,因为您当前的主题可能依赖于appcompat主题

为什么它不能与
app
名称空间一起工作,答案是本地库代码的XML属性加载,这在旧答案中处理

旧答案 如果您使用支持库中的
ActionBarActivity
访问API级别11以下的设备,这里的主要问题是,
ActionBarActivity
在自己的范围内重新创建一些本机Android XML属性,例如
Android:showAsAction
,您可以使用以下定义:

xmlns:app="http://schemas.android.com/apk/res-auto"
然后使用
app:
命名空间中的相同属性(此处为
showAsAction
)访问它们。 因此ActionBarActivity无法查看或访问本机的
android:showAsAction
属性,因为它只在
app
命名空间中查找,而不是在
android
命名空间中查找


如果要使用本机属性,则必须将本机
活动
与Holo主题一起使用,该主题仅在API级别11及更高级别上受支持。

当您要使用操作栏时,应始终检查的内容包括

1) 扩展
ActionBarActivity
而不是
Activity

@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);
}
public类主菜单扩展了ActionBarActivity{

2) 按照清单中的定义选择右侧样式

清单

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
这是大多数人都会犯的错误

4) 在
活动中定义
菜单

@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);
}
如果您执行以下所有操作,您的操作栏应该可以工作


然后你应该为每个位置添加
onClickListener

你也可以提供你在片段/活动中使用的代码吗?只需公共布尔onCreateOptions菜单(菜单菜单菜单){getMenuInflater().inflate(R.Menu.main,Menu);return true;}xmlns:[yourapp]=“和[yourapp]:showAsAction=“始终“你能更具体地描述一下[yourapp]应该是什么吗?一些随机标签?我在AndroidManifest中没有看到任何对应用程序名称的引用。“用你的应用程序名称或任何你心中渴望的名称空间替换[yourapp]”。非常感谢你的详细回答。在我的项目中,父主题是错误的(android:Theme.Holo.Light代替了Theme.AppCompat.Light),活动扩展了基本活动(代替了ActionBarActivity)。现在它工作正常。最好的答案是完整的步骤,从正确的父类、清单、样式到菜单设置。我建议有类似问题的人只需循序渐进。答案很好。但是我宁愿使用
@Override public boolean onOptionsItemSelected(MenuItem项)
方法比
OnClickListener
方法适用于每个项目。如这里所述:但我不知道应该放置什么**你的应用**…你能帮忙吗?@VarunBhatia它可以给我任何东西。它可以是xmlns:house=”“,然后是house:showAsAction=“ifRoom”我发现这非常有帮助,特别是在查找gradle文件和删除appcompat条目方面。谢谢!如果我在花几个小时自己弄明白之前阅读了你的新答案就好了……但得到一些确认仍然很好!