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

时间:2014-10-29 18:33:18

标签: android android-layout android-appcompat

在使用新的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在溢出菜单之外显示操作。对此的任何帮助将不胜感激。

enter image description here

3 个答案:

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

我遇到了同样的问题,所以在处理完这些代码后,这些代码对我来说很合适。