Android 带有应用程序的项目:showAsAction未显示
我不明白为什么代码错误且不兼容(AndroidStudio告诉我“应该使用app:showAsAction和appcompat库)代码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
工程完美,但适当和兼容的版本,如
<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条目方面。谢谢!如果我在花几个小时自己弄明白之前阅读了你的新答案就好了……但得到一些确认仍然很好!