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

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中的长按逻辑中添加判断的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值