Android导航栏隐藏与浮现(二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android导航栏隐藏与浮现(二)相关的知识,希望对你有一定的参考价值。

参考技术A android导航栏隐藏与浮现(一) 中已经以 Nexus5 为例, Android M 为基础介绍了怎么实现底部导航栏的隐藏与浮现,本文将介绍怎么在设置(辅助功能)中加入控制该功能的开关。

上图可以看到,应用中加入了一个 Enhance Navigation bar 的选项,该功能开启后可以长点击任务键(Recent)时,导航栏隐藏;从下不向上滑时,导航栏展示。 关闭后即取消了该功能。下面看一下整体的操作步骤:

在 Settings.apk 中修改相应的资源文件即可,修改中可以参考系统设置中的 Large text , 步骤如下:

修改 ./packages/apps/Settings/res/values-zh-rCN/strings.xml ,添加资源名称:

修改 ./packages/apps/Settings/res/values/strings.xml ,添加资源名称:

修改 ./packages/apps/Settings/res/xml/accessibility_settings.xml ,添加开关:

修改 ./frameworks/base/core/java/android/provider/Settings.java ,在内部类 Secure 中添加字段:

修改文件 ./frameworks/base/packages/SettingsProvider/res/values/defaults.xml ,添加默认开关:

修改文件 ./packages/apps/Settings/src/com/android/settings/accessibility/AccessibilitySettings.java , 修改部分基本和 Large text 的相同,diff后的试图如下,也可以根据下面提供修改前和修改后的文件,可以使用 diff 工具对比查看。

diff后的文件对比试图

AccessibilitySettings修改前 AccessibilitySettings修改后

修改 ./frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java ,添加变量:

在recent键长点击处添加开关控制:

使用 mmm 命令针对涉及的模块进行打包。

使用 make snod 命令生成 system.img 。

两次的结合完整的解决了导航栏的隐藏与浮现以及功能控制。

刷机需谨慎!刷机需谨慎!刷机需谨慎!如若刷机请提前备份数据!

Android基础篇 显示隐藏状态栏和导航栏

一、AppTheme主题配置全屏属性

 <item name="android:windowFullscreen">true</item>

二、Activity的setContentView之前设置全屏的flag

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

三、控制状态栏显示、隐藏

// 隐藏状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 显示状态栏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

四、控制状态栏和导航栏显示、隐藏

View.SYSTEM_UI_FLAG_LAYOUT_STABLE:全屏显示时保证尺寸不变。
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,状态栏显示在Activity页面上面。
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏导航栏
View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。
View.SYSTEM_UI_FLAG_VISIBLE:Activity非全屏显示,显示状态栏和导航栏。
View.INVISIBLE:Activity伸展全屏显示,隐藏状态栏。
View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:必须配合View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION组合使用,达到的效果是拉出状态栏和导航栏后显示一会儿消失。

// 全屏展示
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        // 全屏显示,隐藏状态栏和导航栏,拉出状态栏和导航栏显示一会儿后消失。
        activity.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    } else {
        // 全屏显示,隐藏状态栏
        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
    }
}

// 非全屏显示,显示状态栏和导航栏
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

以上是关于Android导航栏隐藏与浮现(二)的主要内容,如果未能解决你的问题,请参考以下文章

[RK3568 Android11] 开发之系统动态隐藏导航栏

Android 显示、隐藏状态栏和导航栏

Android知识串讲(1) 底部导航栏遮挡转屏锁定ActionBar隐藏

Android基础篇 显示隐藏状态栏和导航栏

Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏

Electron菜单栏&导航栏隐藏