PS:以前 Android 4.0 时代,写了个APP,用屏幕底部菜单键提供两个刷新及退出按钮,但是现在 android 动不动就更新下,现在我手机已经到 9.0 版了,原来的导航栏三个小点点菜单键用原来的代码显示不出来了,因此只能找新的代码,找到了这个: https://blog.csdn.net/u014651216/article/details/53188698 ,的代码,贴到原工程里面一大溜报错,仔细检查了一番,修正了全部错误,测试了以下,菜单键终于出现了。证明代码可用,只是不晓得博主“七色音阶”是从哪里摘来的代码,都没测试一下就急匆匆的发出来,唉!还好最终可用。
代码摘自:https://blog.csdn.net/u014651216/article/details/53188698 ,经 “jessezappy” 修正:
注:以下代码已在我的APP中能正常工作于 android 9.0 中!!!
头部引用文件:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.os.Build;
import android.view.Window;
主函数:放置于 Activity 内,onCreate 后,同级
private void showNagivationMenuKey() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.BASE_1_1) {
return;
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.BASE_1_1) {
try {
int flags = WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null);
getWindow().addFlags(flags);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
} else {
try {
Method setNeedsMenuKey = Window.class.getDeclaredMethod("setNeedsMenuKey", int.class);
setNeedsMenuKey.setAccessible(true);
int value = WindowManager.LayoutParams.class.getField("NEEDS_MENU_SET_TRUE").getInt(null);
setNeedsMenuKey.invoke(getWindow(), value);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
调用:可在setContentView 后调用
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.youAPPname);
//---在9.0以上系统加菜单键
showNagivationMenuKey();
}
最终效果:三个点菜单键终于正常呼出,并且和我以前写好的弹出按钮菜单部分联动了。