禁用物理鍵盤menu,將 app:showAsAction="never"屬性的menu在ActionBar顯示出來
阿新 • • 發佈:2019-01-24
1. onCreate方法中呼叫 ---〉 setOverflowShowingAlways();
2. //-------------------------------攔截/遮蔽MENU鍵實現程式碼 --------------------------------------------------
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_MENU) {//MENU鍵
//監控/攔截選單鍵
return true;
}
return super.onKeyDown(keyCode, event);
}
3.//顯示 app:showAsAction="never"屬性的menu-------------------------------------------------------
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
return super.onMenuOpened(featureId, menu);
}
4.//------------------------遮蔽menu鍵---------------------------------------------------------------
private void setOverflowShowingAlways() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
} catch (Exception e) {
e.printStackTrace();
}
}