Android 8.1 中Systemui中的常见修改(四)NavigationBar相关修改

1.NavigationBar的点击区域

有的时候会出现点击手机屏幕左下角也会相应返回的点击事件,我们提供两种修改办法:

第一种修改办法:

/frameworks/base/packages/SystemUI/res/values/dimens.xml

reducing false presses on navbar buttons; approx 2mm -->
29    12dp
30    
31    32dp

第二种修改办法:

/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。对应的配置值为:
space,back;home;recent,menu_ime

可以按照需求,修改这个顺序,比如下面的顺序就是home,back,recent
space,home;back;recent,menu_ime

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:

false
将这个配置信息修改为false即可。

显示Navigationbar:

true

将这个配置信息修改为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中的长按逻辑中添加判断的。

你可能感兴趣的:(android)