AppCompat_v7工具栏作为操作栏不显示菜单中的"始终"操作,但API工具栏确实如此

Roi*_*oen 34 android android-appcompat android-layout

在使用新的API 21工具栏和appCompat_v7两天后,我想我发现了一个错误.如果你的菜单上有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"/>
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

膨胀后(或设置setSupportActionBar方法)

Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle("esurance");
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)

您将获得没有操作图标的工具栏菜单,它将显示在溢出菜单上.

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

<Toolbar 
    android:layout_width="match_parent"
    android:layout_height="52dp"
    android:id="@+id/toolbar">
</Toolbar>
Run Code Online (Sandbox Code Playgroud)

也许我在这里遗漏了一些东西,但到目前为止,我一直无法使用appCompat在溢出菜单之外显示操作.任何有关这方面的帮助将非常感激.

在此输入图像描述

ian*_*ake 77

根据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>
Run Code Online (Sandbox Code Playgroud)

  • @HarshvardhanTrivedi这也是我的情况.但幸运的是我找到了解决方案:在`onCreateActionMode`中不要使用`mode.getMenuInflater()`,而是使用`ActionBarActivity`中的`getMenuInflater()`. (6认同)