showAsAction =“ifRoom”即使有足够的空间也不显示该项目

我试图让ActionBar在我的应用程序上正常工作(并且我使用ActionBarSherlock来获得Android 2.x和4.x之间统一的UI)。

我觉得像android:showAsAction="ifRoom"只是一个大,胖的谎言。 每当我给ifRoom设置一个动作,它总是出现在溢出菜单,即使有空间的PLENTY。 这是来自同一个模拟器的两个屏幕截图。 第一个显示ActionBar的所有选项设置为always ,第二个显示ActionBar,最后两个选项设置为ifRoom 。 正如你所看到的,当他们全部显示在屏幕截图中时,有足够的空间,那为什么他们不在第二个显示,因为他们有空间?

在这里输入图像说明

在这里输入图像说明

这是我的menu.xml:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/add" android:icon="@drawable/ic_menu_btn_add" android:showAsAction="always" android:title="Add"/> <item android:id="@+id/calculateNPV" android:icon="@drawable/menu_icon_npv" android:showAsAction="always" android:title="NPV"/> <item android:id="@+id/calculateIRR" android:icon="@drawable/menu_icon_irr" android:showAsAction="always" android:title="IRR/YR"/> <item android:id="@+id/send" android:icon="@android:drawable/ic_menu_share" android:showAsAction="always" android:title="@string/share_pdf"/> <item android:id="@+id/graph" android:icon="@drawable/ic_menu_gallery" android:showAsAction="ifRoom" android:title="@string/view_cashflow_diagram"/> <item android:id="@+id/deleteReorder" android:icon="@drawable/ic_menu_clear_playlist" android:showAsAction="ifRoom" android:title="@string/delete_reorder_cashflows"/> </menu> 

我希望我来参加这个晚会还不迟。

这不是一个很大的谎言,而是一个小小的疏忽。

showAsAction属性必须使用不同的名称空间"http://schemas.android.com/apk/res-auto"来定义

因此,您应该在顶部菜单标记中定义一个名称空间,如下所示xmlns:app="http://schemas.android.com/apk/res-auto"

然后用它来定义你的showAsAction属性,就像这样app:showAsAction="ifRoom"

这应该解决它

这是因为有指定最大数量的项目,应该去的行动吧,它似乎是4.当然,你可以强制他们出现设置showAsAction: always但关于谷歌API指南:

如果您认为有四个以上的菜单项目可以作为行动项目,那么您应该仔细考虑它们的相对重要性,并尝试设置不超过四个作为行动项目(并使用“ifRoom”值当空间限制在较小的屏幕上时,允许系统放回溢出菜单)。 即使宽屏幕上的空间可用,也不应该创build一长串的操作项目,这些操作项目会使用户界面出现混乱,并出现桌面工具栏的情况,因此请尽量减less操作项目的数量。

此外,以下操作不应显示为操作项目:设置,帮助,反馈或类似内容。 始终将它们保存在溢出菜单中。

为了补充来自Michal Z的答案:Androiddevise指南Page Patterns-> Actionbar在“Action Buttons”一章中说:

http://developer.android.com/design/patterns/actionbar.html

主要操作栏中会有多less动作? 操作栏容量由以下规则控制:

  • 主操作栏中的操作button可能不占用酒吧宽度的50%以上
  • 底部动作条上的动作button可以使用整个宽度。
  • 与密度无关的像素(dp)中的屏幕宽度决定了适合主操作栏的项目数量:
    • 小于360 dp = 2个图标
    • 360-499 DP = 3个图标
    • 500-599 dp = 4个图标
    • 600 dpi和更大= 5个图标

使用app:showAsAction="always"而不是android:showAsAction="always"

使用

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="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" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/menu_share" android:title="Share" android:orderInCategory="100" app:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" /> </menu>