Android MenuItem获取showAsAction的方法

时间:2012-12-05 00:12:47

标签: android menuitem

我正在寻找 mentuItem.setShowAsAction()的免费方法,即 menuItem.getShowAsAction(),因为它似乎不是一个。

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

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

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

在Java或Android中是否有另一个通用的get属性方法,以在menuitem中的属性showAsAction中查找XML中的设置。

感谢

3 个答案:

答案 0 :(得分:1)

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

  

<强> android.support.v7.internal.view.menu.MenuItemImpl

请注意 MenuItem 是一个界面,而不是创建所谓的menuitem对象实例的类。

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

这样做:

((MenuItemImpl)item).isActionButton()

答案 1 :(得分:1)

你可以使用这个方法,从另一个答案中说的是:

@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;
}

答案 2 :(得分: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)