ActionBar 上的溢出操作未显示

6

我使用ActionBar Sherlock创建了一个工具栏,但是由于功能过多,需要显示“更多”选项,可是却没有显示该选项。以下是我的配置信息:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
      android:icon="@drawable/action_search"
      android:title="@string/menu_search"
      android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_library"
      android:icon="@drawable/hardware_headphones"
      android:title="@string/my_music"
      android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_downloads"
      android:icon="@drawable/av_download"
      android:title="@string/downloads"
      android:showAsAction="ifRoom|withText"/>
</menu>

以下是设置的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getSupportMenuInflater();
    menuInflater.inflate(R.menu.shopping_menu, menu);
    MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
    searchMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            startActivity(new Intent(ShopActivity.this, SearchDialog.class));
            return false;
        }
    });
    MenuItem downloadMenuItem = menu.findItem(R.id.menu_downloads);
    downloadMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            startActivity( new Intent(ShopActivity.this, DownloadQueueActivity.class) );
            return false;
        }
    });
    MenuItem myMusicItem = menu.findItem(R.id.menu_library);
    myMusicItem.setOnMenuItemClickListener( new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            startActivity(new Intent(ShopActivity.this, MyMusicActivity.class));
            return false;
        }
    });

    return true;
}

我查看了ActionBar Sherlock的演示,但是我无法确定它们与我的操作有何不同来获取溢出,所以这里发生了什么造成它没有显示?


3
如果你的设备有物理菜单键,则溢出指示器不会显示。这是设计行为。请参阅此处以获取更多相关问题的详细信息。 - t0mm13b
在答案中放置这个,我会授予你积分。谢谢。 - chubbsondubs
这里是ActionBar。它与Tom的评论相同,但来自于Android官方文档。 - user1521536
3个回答

23
如果你的手机有实体菜单键,那么溢出指示器就不会显示出来。这是设计上的行为。更多细节可以看这里提问:这里

4
在您的活动中,另一种方法是添加此属性:android:theme="@style/Theme.Sherlock.ForceOverflow",这将在操作栏中放置无法适应的操作,并使用溢出图标访问它作为下拉菜单。总的来说,我认为这个关于将菜单按钮放入垃圾桶的设计决定很愚蠢,因为Google试图将人们移动到操作栏中,因为根据他们自己的承认和研究,没有人知道菜单按钮在哪里。那么默认情况下为什么还要有溢出按钮呢?“哦,我明白了。让我们把它放在没人去的地方。”那么不是所有Google所做的事情都会很出色。 - chubbsondubs

0

嗯,我认为这里有两个问题。第一,正如t0mm13b所说,如果设备有物理菜单键,则不会显示溢出指示器。这是设计上的问题。尽管在我的经验中,它并不适用于每个设备(不幸的是...)

第二个问题是,如果您想要将项目强制放入溢出区域,则需要将showAsAction设置为“never”。否则,在操作栏中仅会出现那些“不适合”其中的元素。鉴于您希望使用文本显示3个项目...您几乎肯定会有至少一个溢出项,因此会显示溢出图标(附带第一段的警告)


0

根据Android指南,在menu_main.xml文件中将android:showAsAction标签更改为app:showAsAction,如下所示:

如果不存在,请添加此行

menu xmlns:app="http://schemas.android.com/apk/res-auto"

    <item android:id="@+id/action_search"
        android:icon="@drawable/search_icon"
        android:title="@string/action_search"
        app:showAsAction="always"/> <!--change here android: to app:-->

    <item android:id="@+id/action_location"
        android:icon="@drawable/location_icon"
        android:title="@string/action_locate"
        app:showAsAction="always"/>
</menu>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接