项目与应用程序:showAsAction不显示

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

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

作品完美,但适当和兼容的版本

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

根本不显示我的图标。

我正在testing三星GT P5210(android v。4.4.2)和Nexus 7(4.4.4)

Solutions Collecting From Web of "项目与应用程序:showAsAction不显示"

你应该经常检查什么时候你想使用操作栏是

1)扩展ActionBarActivity而不是Activity

public class MainMenu extends ActionBarActivity{

2)按清单中的定义select正确的样式

performance

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 

样式

  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> </style> 

3)为showAsActionselect正确的标题

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

这是大多数人错误的

4)在Activity定义你的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); } 

如果你做了以下所有操作,你的操作栏应该可以工作。

那么你应该为每个位置添加onClickListener

我只是重读你的问题,看到你的问题是完全相反的(但我的旧答案的一些部分仍然适用于你的问题),所以这里是更新的答案:

更新:

你已经在你的gradle文件中导入了appcompat库,但你似乎只支持比API Level 11或14更新的设备? 如果是这种情况,lint检查会发现你已经通过gradle导入了appcompat库,并且认为你应该使用ActionBarActivity因为你的库导入。 这就是为什么你得到错误。 但是,当你的android:showAsAction属性正在工作,你使用本地的Activity和本地属性调用是正确的,即使lint检查说它是错误的。 所以,如果你想删除lint错误,你必须从你的gradle文件中删除appcompat lib,也许你的活动主题改为原生Holo Light主题,因为你当前的主题可能依赖于appcompat主题。

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

老答案

如果您使用支持库中的ActionBarActivity访问低于API级别11的设备,则主要的问题是, ActionBarActivity重新创build一些本机Android XML属性,例如android:showAsAction

 xmlns:app="http://schemas.android.com/apk/res-auto" 

然后在app:名称空间中使用相同的属性(这里是showAsAction )访问它们。 所以ActionBarActivity无法看到或到达原生的android:showAsAction属性,因为它只在app名称空间中查找,而不是在android名称空间中查找。

如果你想使用本地属性,你必须使用本地Activity与全息主题,这是只支持从API级别11和更高。

前页:

 yourapp:showAsAction="ifRoom" 

要么

 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> 

和活动:

 @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); } } 

在这里 阅读更多