我已经实现了一个用于显示菜单项的操作栏。
所以我给了android:showAsAction="always"
3个菜单项,android:showAsAction="withtext"
用于其他4个菜单项,我想在溢出菜单中显示。
但是当我在运行android 3.0以下版本的设备中运行代码时,这些项目显示在菜单面板中。如果我在大屏幕显示设备中运行代码,有时这些也会显示操作栏。 如何限制菜单项的宽度以在所有屏幕分辨率中进行调整?
答案 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>