【问题标题】:Overflow Actions on ActionBar not showingActionBar 上的溢出操作未显示
【发布时间】:2012-07-14 01:34:36
【问题描述】:

我有一个使用 ActionBar Sherlock 的 ActionBar,我需要它来显示溢出,因为我的操作比空间多。但是,它不显示溢出图标。这是我的配置:

<?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 中的演示,但我不知道他们在获取溢出方面的做法与我所做的不同。那么这里发生了什么,为什么它没有显示呢?

【问题讨论】:

  • 如果您有物理菜单键,溢出指示器不会显示。这是一种设计行为。请参阅here 了解有关另一个问题的更多详细信息。
  • 把这个放到答案中,我会给你加分。谢谢
  • 这里是ActionBar。跟Tom的评论一样,不过是来自Android的官方文档。

标签: android android-actionbar actionbarsherlock


【解决方案1】:

如果您有物理菜单键,则不会显示溢出指示器。这是一种设计行为。请参阅here 了解有关另一个问题的更多详细信息。

【讨论】:

  • 这个答案的另一面是将此属性添加到您的活动中: android:theme="@style/Theme.Sherlock.ForceOverflow" 它将把动作放在 ActionBar 中适合溢出图标以将其作为下拉菜单访问。总的来说,我认为这种将垃圾放在菜单按钮上的设计决定是愚蠢的,因为谷歌正试图将人们转移到 ActionBar,因为根据他们自己的承认和研究,没有人知道菜单按钮。那么为什么默认会有溢出呢?! “哦,我明白了。让我们把它放在没人去的地方。”好吧,并非 Google 所做的一切都可以出色。
【解决方案2】:

嗯,我认为这里有两个问题。首先,如 t0mm13b 所述,如果设备具有物理菜单键,则不会显示溢出指示器。这是设计使然。虽然根据我的经验,它并不适用于所有设备(不幸的是......)

第二个问题是,如果你想强制一个项目溢出,你需要将 showAsAction 设置为“never”。否则,溢出中出现的唯一元素是那些在操作栏中“不适合”的元素。鉴于您有 3 个项目要与文本一起显示.. 您几乎可以保证至少有一个溢出项目,因此有溢出图标(带有第一段的警告)

【讨论】:

    【解决方案3】:

    尝试根据menu_main.xml文件中的Android指南将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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多