如何判断导航键是否打开

如何判断导航键是否打开

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

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 的适配等等。

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

文章出处

如何判断导航键是否打开

Android应用程序中,如果你想根据应用是否正在运行(即Activity是否可见)来动态地显示或隐藏导航栏返回键,你可以利用`ActionBarDrawerToggle`配合`DrawerLayout`或者自定义的`Toolbar`。当应用处于全屏模式且有导航栏时,如果用户点击了"最近任务"或"应用抽屉"等导致Activity被切换到后台或暂停状态,此时可以隐藏返回键,反之则显示。 以下是一个简单的步骤概述: 1. 创建一个`ActionBarDrawerToggle`实例,并设置它与你的`DrawerLayout`或`Toolbar`关联。 2. 在`onAttachedToWindow()`或`onStart()`方法中,检查当前Activity的状态,如是否可见或者前台运行。 3. 如果应用在后台或者非活动状态,调用`getSupportActionBar().setDisplayHomeAsUpEnabled(false)`来隐藏返回键。 4. 否则,在`onResume()`或`onPostCreate()`中,恢复默认设置`setDisplayHomeAsUpEnabled(true)`以显示返回键。 ```java ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.open_drawer, R.string.close_drawer ); // 在onAttachToWindow() 或 onStart() 中检查并调整返回键 if (!isActivityVisible()) { getSupportActionBar().setDisplayHomeAsUpEnabled(false); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { // 当滑动时,也可以考虑相应地调整返回键的状态 } @Override public void onDrawerOpened(View drawerView) { // 当打开抽屉时,处理返回键状态 } // 其他回调方法中处理类似情况... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值