在使用新的API 21工具栏和appCompat_v7进行了2天的努力之后,我想我发现了一个错误。如果您的菜单上有2个操作,请执行以下操作:
<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在溢出菜单之外显示操作。对此的任何帮助将不胜感激。
答案 0 :(得分:77)
根据Action Bar training,您必须使用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>
答案 1 :(得分:3)
把
像这样的xmlns:应用=&#34; HTTP://schemas.android.com/apk/res-auto"在您的菜单标签中
<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
`
答案 2 :(得分:3)
首先使用app:showAsAction
代替android:showAsAction
(如@ianhanniballake)
在给菜单充气后onCreateActionMode
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;
}
在像这样的代码
<source>
我遇到了同样的问题,所以在处理完这些代码后,这些代码对我来说很合适。