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; }
我有同样的问题,所以工作之后,这些代码行我工作得很好。