9

我正在寻找对mentuItem.setShowAsAction()的补充方法,即menuItem.getShowAsAction(),因为似乎没有。

http://developer.android.com/reference/android/view/MenuItem.html

因为我需要在将它们设置为 MenuItem.SHOW_AS_ACTION_NEVER 之前记录当前状态,所以当设备的方向变回横向时,我可以将菜单项返回到它们的旧状态。

我需要这样做,因为 Honeycomb 没有提供新行来显示 ICS 中的选项卡。所以在蜂窝中没有足够的空间给标签。

在 Java 或 Android 中是否有另一种通用的获取属性方法来在 XML 中查找 menuitem 中属性 showAsAction 的设置。

谢谢

4

3 回答 3

3

您可以使用此方法,从另一个答案中所说的内容:

@SuppressLint("RestrictedApi")
private int getShowAsActionFlag(MenuItem item) {
    MenuItemImpl itemImpl = ((MenuItemImpl) item);
    if (itemImpl.requiresActionButton()) return MenuItemImpl.SHOW_AS_ACTION_ALWAYS;
    else if (itemImpl.requestsActionButton()) return MenuItemImpl.SHOW_AS_ACTION_IF_ROOM;
    else if (itemImpl.showsTextAsAction()) return MenuItemImpl.SHOW_AS_ACTION_WITH_TEXT;
    else return MenuItemImpl.SHOW_AS_ACTION_NEVER;
}
于 2018-01-23T01:34:08.407 回答
1

我发现下面的类有这个方法isActionButton()

android.support.v7.internal.view.menu.MenuItemImpl

请注意,MenuItem是一个接口,而不是从中创建假定的 menuitem 对象实例的类。

如果您使用的是 android.support.v7 兼容包,只需将 menuitem 对象转换为MenuItemImpl

它是这样完成的:

((MenuItemImpl)item).isActionButton()
于 2013-12-15T16:51:28.293 回答
1

如果有人愿意,这是一个扩展

val MenuItem.showAsActionFlag: Int
    @SuppressLint("RestrictedApi")
    get() {
        this as MenuItemImpl
        return when {
            requiresActionButton() -> MenuItemImpl.SHOW_AS_ACTION_ALWAYS
            requestsActionButton() -> MenuItemImpl.SHOW_AS_ACTION_IF_ROOM
            showsTextAsAction() -> MenuItemImpl.SHOW_AS_ACTION_WITH_TEXT
            else -> MenuItemImpl.SHOW_AS_ACTION_NEVER
        }
    }

你可以像这样使用它

if (item.showAsActionFlag == SHOW_AS_ACTION_ALWAYS)
于 2020-04-13T18:45:10.263 回答