操作栏仅显示菜单中的一个项目时的下拉列表

Dar*_*ski 5 android android-appcompat android-actionbar android-actionbar-compat

我在我的应用程序中使用app compat主题,并在操作栏中我有一个菜单,其中一个项目应该显示为一个图标 - 但我得到这样的菜单按钮

在此输入图像描述

这是我的菜单xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_play"
        android:icon="@drawable/play"
        android:orderInCategory="100"
        android:showAsAction="always"/>

</menu>
Run Code Online (Sandbox Code Playgroud)

以下是关于如何初始化操作栏的代码:

getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setTitle(title);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(false);
Run Code Online (Sandbox Code Playgroud)

并显示菜单:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.names, menu);
        playStop = menu.findItem(R.id.action_play);
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

那么有人可以帮我显示菜单项吗?

谢谢

Pan*_*mar 8

使用支持库,android:showAsAction将无法完成其任务.所以你的菜单声明不正确.从文档

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="ifRoom"  />
    ...
</menu>
Run Code Online (Sandbox Code Playgroud)

如果操作栏中的项目空间不足,则会出现在操作溢出中.

使用支持库中的XML属性

请注意,上面的showAsAction属性使用标记中定义的自定义命名空间.在使用支持库定义的任何XML属性时,这是必需的,因为旧设备上的Android框架中不存在这些属性.因此,您必须使用自己的命名空间作为支持库定义的所有属性的前缀.


所以你的菜单应该是xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_play"
        android:icon="@drawable/play"
        android:orderInCategory="100"
        app:showAsAction="always"/>

</menu>
Run Code Online (Sandbox Code Playgroud)

  • 只是想补充一点,只有在使用支持库时才有效.如果您使用默认的```ActionBar```,问题中发布的原始代码将起作用. (2认同)