Android 工具栏:溢出菜单按钮始终显示

Android 工具栏:溢出菜单按钮始终显示,android,android-support-library,android-toolbar,Android,Android Support Library,Android Toolbar,问题:更新支持库并使用工具栏后,溢出菜单按钮始终显示在带或不带硬件菜单按钮的设备上 我需要什么:我希望溢出菜单按钮仅在设备没有硬件菜单按钮时显示 menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_setti

问题:更新支持库并使用工具栏后,溢出菜单按钮始终显示在带或不带硬件菜单按钮的设备上

我需要什么:我希望溢出菜单按钮仅在设备没有硬件菜单按钮时显示

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/action_settings"
    app:showAsAction="never"
    android:title="@string/action_settings"/>

<item
    android:id="@+id/import_data"
    app:showAsAction="never"
    android:title="@string/import_data"/>
在onCreate中:setSupportActionBar(mToolbar)


谢谢你的帮助

我找到了解决问题的方法:

1-不要调用
setSupportActionBar(mToolbar)更多,请直接使用工具栏

2-通过调用检查设备是否有硬件菜单按钮
ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(getApplicationContext())

3-如果设备具有菜单按钮,则在
onCreateOptions菜单中返回true,

否则,我会在工具栏中展开菜单

当硬件菜单按钮出现时,您可以更改其行为,以显示/隐藏工具栏溢出菜单。为此,请覆盖
活动的
onKeyUp
方法

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        if (mToolbar.isOverflowMenuShowing()) {
            mToolbar.hideOverflowMenu();
        } else {
            mToolbar.showOverflowMenu();
        }
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
它很好用(至少对我来说是这样)。

在活动的onCreate方法中,执行以下操作:

    boolean hasHarwareMenu = ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(getApplicationContext()));
    if (!hasHarwareMenu) setSupportActionBar(toolbar);

并在OnCreateOptions菜单中正常地膨胀menu.xml。

尝试app:showAsAction=“always”我不希望我的操作总是显示这是KITKAT之后的预期行为,包括
KITKAT
。这是为了让制造商放弃现在过时的硬件菜单键。换句话说:不要修复它,它没有损坏;在CreateOptions菜单中,查看是否有帮助
    boolean hasHarwareMenu = ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(getApplicationContext()));
    if (!hasHarwareMenu) setSupportActionBar(toolbar);