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>