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

Ken*_*and 47 android android-layout android-menu actionbarsherlock android-actionbar

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

我觉得android:showAsAction="ifRoom"这只是一个大而肥胖的谎言.每当我设置动作时,ifRoom即使有足够的空间,也会在溢出菜单中显示.以下是来自同一模拟器的两个屏幕截图.第一个显示ActionBar,其中所有选项都设置为always,第二个显示ActionBar,后两个选项设置为ifRoom.正如你所看到的那样,当always屏幕截图中显示所有房间时,还有很多空间,所以为什么它们都没有在第二个显示,因为它们有空间?

在此输入图像描述

在此输入图像描述

这是我的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>
Run Code Online (Sandbox Code Playgroud)

jos*_*ang 38

我希望我来参加聚会还不算太晚.

这真的不是一个大胖子,而是一个小小的疏忽.

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

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

然后使用它来定义你的showAsAction属性 app:showAsAction="ifRoom"

那应该解决它

  • 我有完全相同的问题 - 事实上在我的情况下 - 我必须完全相反:使用android:showAsAction命名空间来解决这个问题. (12认同)
  • 如果您使用`ActionBarActivity`,则需要使用命名空间.使用`Activity`你可以使用android:showAsAction (4认同)

Mic*_* Z. 13

这是因为指定了最大数量的项目应该转到操作栏,它似乎是4.当然,您可以通过设置强制它们出现,showAsAction: always但是关于谷歌API指南:

如果您认为超过四个菜单项可以作为操作项进行验证,那么您应该仔细考虑它们的相对重要性级别,并尝试将不超过四个设置为操作项(并使用"ifRoom"值来执行此操作当较小屏幕上的空间有限时,允许系统将某些内容放回溢出菜单中.即使宽屏幕上有空间,也不应创建一长串操作项,使UI混乱并显示为桌面工具栏,因此请将操作项的数量保持在最低限度.

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

  • 它并不总是4.请参阅此图表:http://developer.android.com/design/media/action_bar_pattern_table.png (15认同)
  • 但正如你所看到的,那些行动还有空间,所以-ifRoom-是一个很大,很胖的谎言.:)令人沮丧的是,没有可见的指示器,通过菜单按钮可以获得更多选项.向他们展示一些选项会更糟,但不是没有指示器,因为显示SOME告诉用户这是要查看的位置.为什么会有另一个位置? (4认同)

arn*_*ans 10

为了补充Michal Z的答案:Android设计指南页面模式 - > Actionbar在"Action Buttons"一章中说明如下:

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

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

  • 主操作栏中的操作按钮可能不会超过条形宽度的50%.
  • 底部操作栏上的操作按钮可以使用整个宽度.
  • 与密度无关的像素(dp)中的屏幕宽度决定了适合主操作栏的项目数:
    • 小于360 dp = 2个图标
    • 360-499 dp = 3个图标
    • 500-599 dp = 4个图标
    • 600 dp和更大= 5个图标


Rah*_*war 5

app:showAsAction="always"代替android:showAsAction="always"