AppCompat_v7工具栏作为操作栏不会显示菜单中的“始终”操作,但API工具栏会显示

经过2天的努力,新API 21工具栏和appCompat_v7,我觉得我发现了一个错误。 如果你在你的菜单上有两个动作,像这样:

<item android:id="@+id/action_test" android:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> 

和一个像这样定义的appCompat工具栏:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.toolbar.MainActivity" > <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="52dp" android:id="@+id/toolbar"> </android.support.v7.widget.Toolbar> </RelativeLayout> 

充气后(或设置setSupportActionBar方法)

 Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); toolbar.setTitle("esurance"); setSupportActionBar(toolbar); 

你会得到没有你的动作图标的工具栏菜单,它会显示在溢出菜单上。

但是,如果您使用API​​ 21的工具栏类,它将显示您在菜单布局中定义的操作…

 <Toolbar android:layout_width="match_parent" android:layout_height="52dp" android:id="@+id/toolbar"> </Toolbar> 

也许我在这里错过了一些东西,但到目前为止,我一直无法使用appCompat在溢出菜单之外显示操作。 任何帮助,将不胜感激。

在这里输入图像说明

根据Action Bar培训 ,您必须使用app:showAsAction属性而不是android:showAsAction属性:

请注意,上面的showAsAction属性使用<menu>标签中定义的自定义名称空间。 这在使用由支持库定义的任何XML属性时是必需的,因为这些属性在旧版设备上的Android框架中不存在。 所以您必须使用自己的名称空间作为支持库定义的所有属性的前缀。

所以你的菜单文件应该是这样的:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_test" app:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_settings" android:orderInCategory="100" app:showAsAction="never" android:title="@string/action_settings"/> </menu> 

xmlns:app =“http://schemas.android.com/apk/res-auto”int你的菜单标签;

喜欢这个

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

然后使用app:showAsAction = "always"

请记住,在所有菜单项中使用app:showAsAction而不是android:showAsAction

`

首先使用app:showAsAction而不是android:showAsAction (就像@ianhanniballake)之后,在onCreateActionMode之后,在代码中setShowAsAction你的菜单setShowAsAction ,像这样

 @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.your_menu_name, menu); menu.findItem(R.id.your_first_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.findItem(R.id.your_second_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; } 

我有同样的问题,所以工作之后,这些代码行我工作得很好。