Android - 如何在操作栏中指定菜单项的宽度,以便在“溢出”按钮中显示菜单项

时间:2013-01-28 06:31:54

标签: android android-actionbar menuitem

我已经实现了一个用于显示菜单项的操作栏。 所以我给了android:showAsAction="always" 3个菜单项,android:showAsAction="withtext"用于其他4个菜单项,我想在溢出菜单中显示。

但是当我在运行android 3.0以下版本的设备中运行代码时,这些项目显示在菜单面板中。如果我在大屏幕显示设备中运行代码,有时这些也会显示操作栏。 如何限制菜单项的宽度以在所有屏幕分辨率中进行调整?

2 个答案:

答案 0 :(得分:0)

如果要在溢出菜单中显示某些项目,请使用android:showAsAction="ifRoom"到menu.xml中的特定菜单项。

请注意,如果目标设备具有专用/硬菜单按钮,您将无法按照文档在操作栏内看到溢出按钮。 This也会帮助你..

修改

如果设备没有硬按钮,这将为您提供溢出菜单。 如果您想要显示溢出菜单,即使您有硬按钮,请尝试以下操作:

try {
      ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
                if(menuKeyField != null) {
                    menuKeyField.setAccessible(true);
                    menuKeyField.setBoolean(config, false);
                }
            } catch (Exception ex) {
                // Ignore
            }

它有点破解,会强制设备忽略硬菜单按钮。

查看以下代码。此实现仅在操作栏中显示第4项,在溢出菜单中显示其他项目。发生这种情况是因为它是唯一一个提供了Show_As_Always。

@Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
       menu.add(0, 2, 0, "Item 1").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
       menu.add(0, 2, 0, "Item 2").setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
       menu.add(0, 2, 0, "Item 3").setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
       menu.add(0, 2, 0, "Item 4").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
       menu.add(0, 2, 0, "Item 5").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

       return true;
    }

答案 1 :(得分:0)

如果要以编程方式添加,请使用:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 1, 0, "Item #1").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
    menu.add(0, 2, 0, "Item #2").setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
    return true;
}

您还可以通过菜单XML添加项目:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/your_id_1"
        android:showAsAction="never"
        android:title="Item #1"/>

    <item
        android:id="@+id/your_id_2"
        android:showAsAction="never"
        android:title="Item #2"/>

</menu>