美文网首页
Android沉浸式适配-三星S8动态设置导航栏

Android沉浸式适配-三星S8动态设置导航栏

作者: 332ad49fb8f6 | 来源:发表于2017-06-30 17:41 被阅读1177次

由于自己手上用的手机是三星s8,作为一个开发者,看见自己app不适配自己手机,肯定是很难受的,所以有了这段代码

如何判断S8是否隐藏导航栏

以下是我从手机上抓到的系统log

06-30 17:21:54.554 2767-2767/? D/NavBarSettingsHelper: content://settings/global/navigationbar_hide_bar_enabled changed
06-30 17:21:54.554 2767-2767/? D/NavBarSettingsHelper: onChange()
06-30 17:21:54.554 2767-2767/? D/NavBarSettingsHelper: mKey=navigationbar_hide_bar_enabled, mIntValue=0, mStringValue=null
06-30 17:21:54.554 2767-2767/? V/NavBarSettingsHelper: *** broadcastChange for content://settings/global/navigationbar_hide_bar_enabled
06-30 17:21:54.554 2767-2767/? V/NavBarSettingsHelper: *** broadcastChange tempList.size() = 1

看到这里,一些有经验的朋友已经知道了来龙去脉了

下面贴上判断是否隐藏导航栏代码

try {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        int enable = Settings.Global.getInt(activity.getContentResolver() , "navigationbar_hide_bar_enabled");
    }
} catch (Settings.SettingNotFoundException e) {
    e.printStackTrace();
}

这里的enable变量,1则表示隐藏

如何监听S8导航栏

private class BarHideEnableObserver extends ContentObserver {

    BarHideEnableObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        //实现你自己的逻辑
    }

}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    mBarHideEnableObserver = new BarHideEnableObserver(new Handler());
    getContentResolver().registerContentObserver(Settings.Global.getUriFor("navigationbar_hide_bar_enabled"), true, mBarHideEnableObserver);
}

记得在不需要的时候unregisterContentObserver

@Override
protected void onDestroy() {
    getContentResolver().unregisterContentObserver(mBarHideEnableObserver);
    super.onDestroy();
}

相关文章

网友评论

      本文标题:Android沉浸式适配-三星S8动态设置导航栏

      本文链接:https://www.haomeiwen.com/subject/xvjicxtx.html