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

问题描述 投票:1回答:2

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

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

android android-actionbar menuitem
2个回答
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;
    }

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>
© www.soinside.com 2019 - 2024. All rights reserved.