如何判断导航键是否打开

如何判断导航键是否打开

原生的方法:
原生方法
也是判断大多数手机导航键是否打开的方法。

public boolean hasNavigationBar (Resources resources)
{
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
    return id > 0 && resources.getBoolean(id);
}

这个 Resources 对象如何获取呢?如果是四大组件,直接调用 getResources() 方法即可。或者先获取一个 Context 对象,再通过 context.getResources() 获取 Resources 对象。

再看看原生代码 DisplayPolicy.java 中的写法:

if (mDisplayContent.isDefaultDisplay) {
    mHasStatusBar = true;
    mHasNavigationBar = mContext.getResources().getBoolean(R.bool.config_showNavigationBar);

    // Allow a system property to override this. Used by the emulator.
    // See also hasNavigationBar().
    String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");
    if ("1".equals(navBarOverride)) {
        mHasNavigationBar = false;
    } else if ("0".equals(navBarOverride)) {
        mHasNavigationBar = true;
    }
} else {
    mHasStatusBar = false;
    mHasNavigationBar = mDisplayContent.supportsSystemDecorations();
}

主要是通过判断 config_showNavigationBar 这个属性的值,boolean 型,true 为导航键打开,false 为导航键关闭。这对于大多数手机是生效的。但对于个别手机,比如 vivo,这样判断还不够,判断这个值返回的永远是 true。不过没关系,还有方法。我们可以通过判断导航手势是否打开来判断导航键是否打开。

Settings.Secure.getInt(context.getContentResolver(), "navigation_gesture_on", 0);

我们通过获取系统数据库 navigation_gesture_on 这个字段的值来判断导航手势是否打开,1 为打开,0 为关闭,导航手势关闭即为导航键打开。这样我们就可以干很多事情,比如获取导航键的高度,做一些 UI 的适配等等。

导航键的判断就是这么简单。

文章出处

如何判断导航键是否打开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值