MenuItem.SHOW_AS_ACTION_IF_ROOM如何工作?

开始使用ActionBar …

对于MenuItem.SHOW_AS_ACTION_IF_ROOM文档说:

如果系统确定有足够的空间,将该项目显示为操作栏中的button。

我的问题是,系统如何决定是否有空间,我可以影响/调整这个决定吗?

在我的情况下,我有几个菜单项可以适当地显示为操作button – 如果有足够的空间。 在较小的屏幕上,他们占用足够的空间来使操作栏的标题被省略。 我宁愿他们在这种情况下进入行动溢出,而不是模糊标题。

PS。 我正在使用ActionBarSherlock,并没有检查如果本机ActionBar行为完全相同。 如果原生ActionBar不允许“if-room”操作项过多缩小标题,那么很酷,我会去查找ActionBarSherlock中的一个bug。

根据官方Androiddevise指南( http://developer.android.com/design/patterns/actionbar.html ):

操作栏容量由以下规则控制:

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

好的,这不是很难弄清楚,逻辑是在ActionMenuPresenter.java中

看起来:

  • 动作button不允许占用超过一半的水平空间
  • 显示的动作button的数量也是有限的,根据屏幕宽度( R.integer.abs__max_action_buttons
  • 如果动作属于同一组,则数字限制可以被打破,宽度限制不能 – 如果组打破了宽度限制,整个组进入溢出。

我是ActionBarSherlock用户,我可以build议你浏览沃顿商学院的答案。

据我所知,他有他的onMeasure方法的布局,他通过定义他们的摘要宽度检查标题,标识和菜单项视图可以放置在操作栏中。

你可以在BaseMenuPresenter类中检查他的逻辑,如果我可以相信我的记忆。