1.NavigationBar的点击区域
有的时候会出现点击手机屏幕左下角也会相应返回的点击事件,我们提供两种修改办法:
第一种修改办法:
/frameworks/base/packages/SystemUI/res/values/dimens.xml
reducing false presses on navbar buttons; approx 2mm -->
29 <dimen name="navigation_bar_deadzone_size">12dp</dimen>
30 <!-- size of the dead zone when touches have recently occurred elsewhere on screen -->
31 <dimen name="navigation_bar_deadzone_size_max">32dp</dimen>
第二种修改办法:
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
private View createView(String buttonSpec, ViewGroup parent, LayoutInflater inflater) {
311 View v = null;
312 String button = extractButton(buttonSpec);
313 if (LEFT.equals(button)) {
314 String s = Dependency.get(TunerService.class).getValue(NAV_BAR_LEFT, MENU_IME); //该这个地方为MENU_IME
315 button = extractButton(s);
316 } else if (RIGHT.equals(button)) {
317 String s = Dependency.get(TunerService.class).getValue(NAV_BAR_RIGHT, MENU_IME);
318 button = extractButton(s);
319 }
320 // Let plugins go first so they can override a standard view if they want.
2.调整NavigationBar的顺序
在N上,由NavigationBarInflaterView负责NavigationBar的view生成。而下方按钮顺序是由config_navBarLayout来决定。
默认顺序,从左往右为:back,home,recent。对应的配置值为:
<string name="config_navBarLayout">space,back;home;recent,menu_ime</string>
可以按照需求,修改这个顺序,比如下面的顺序就是home,back,recent
<string name="config_navBarLayout">space,home;back;recent,menu_ime</string>
3.查看NavigationBar是否隐藏
第一步:修改系统变量。
打开目录下文件:alps/device/mediatek/工程名字/system.prop
查看变量值:qemu.hw.mainkeys=0
qemu.hw.mainkeys=1 表示隐藏Navigationbar
qemu.hw.mainkeys= 0 表示显示Navigationbar
注意: 如果工程没有定义该变量,再进行第二步。否则修改结束。因系统变量优先级比配置文件高。
第二步:修改配置文件。
修改config文件中的 config_showNavigationBar的值。
隐藏Navigationbar:
<bool name=“config_showNavigationBar”>false</bool>
将这个配置信息修改为false即可。
显示Navigationbar:
<bool name=“config_showNavigationBar”>true</bool>
将这个配置信息修改为true即可。
//判断是否存在NavigationBar
public static boolean hasNavigationBar(Context context) {
boolean hasNavigationBar = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try {
//反射获取SystemProperties类,并调用它的get方法
Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
Method m = systemPropertiesClass.getMethod("get", String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
hasNavigationBar = false;
} else if ("0".equals(navBarOverride)) {
hasNavigationBar = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return hasNavigationBar;
}
4.禁止安卓应用进行分屏
https://blog.csdn.net/xiangzaixiansheng/article/details/83007411
禁止安卓应用分屏的终极办法就在以前写的文章里面。
这里面主要是在NavigationBarFragment.java中的长按逻辑中添加判断的。