要实现一个需求,在Android12上实现动态控制状态栏和导航栏的显示及隐藏,基本思路:在frameworks/base 中增加想要的显示控制,在Settings增加开关按钮进行功能出发

一、在framework/base

增加系统属性,用于保存显示状态:true 表示显示,false表示隐藏
可在编译固件时,在mk文件中增加这两个属性

persist.sys.statusbar.enable=true
persist.sys.navigationbar.enable=true

用于控制显示、隐藏的广播

com.systemui.statusbar.show   ----显示状态栏
com.systemui.statusbar.hide   ----隐藏状态栏
com.systemui.navigationbar.show ----显示导航栏
com.systemui.navigationbar.show ----隐藏导航栏

在frameworks/base/packages/SystemUI 增加功能代码
修改代码涉及的文件如下:

AndroidManifest.xml
src/com/android/systemui/navigationbar/NavigationBarController.java
src/com/android/systemui/statusbar/phone/StatusBar.java
src/com/android/systemui/statusbar/window/StatusBarWindowController.java

AndroidManifest.xml 增加广播的应用

+    <protected-broadcast android:name="com.systemui.statusbar.show" />
+    <protected-broadcast android:name="com.systemui.statusbar.hide" />
+
+    <!-- For NavigationBar show or not -->
+    <protected-broadcast android:name="com.systemui.navigationbar.show" />
+    <protected-broadcast android:name="com.systemui.navigationbar.hide" />

statusbar/phone/StatusBar.java 初始化时根据系统属性显示或者隐藏状态栏和导航栏,监听广播显示或隐藏状态栏和导航栏

@@ -313,6 +313,12 @@ public class StatusBar extends SystemUI implementspublic static final int[] CAMERA_LAUNCH_GESTURE_VIBRATION_AMPLITUDES =new int[]{39, 82, 139, 213, 0, 127};+    private static final String ACTION_HIDE_STATUS_BAR = "com.systemui.statusbar.hide";
+    private static final String ACTION_SHOW_STATUS_BAR = "com.systemui.statusbar.show";
+    private static final String ACTION_HIDE_NAVIGATION_BAR = "com.systemui.navigationbar.hide";
+    private static final String ACTION_SHOW_NAVIGATION_BAR = "com.systemui.navigationbar.show";
+    private static final String SYS_PROPERTY_STATUS_BAR = "persist.sys.statusbar.enable";
+    private static final String SYS_PROPERTY_NAVIGATION_BAR = "persist.sys.navigationbar.enable";
+
@@ -966,6 +972,9 @@ public class StatusBar extends SystemUI implements}createAndAddWindows(result);
+        if (!SystemProperties.getBoolean(SYS_PROPERTY_STATUS_BAR, false)) {
+            mStatusBarWindowController.setBarVisibility(View.GONE);
+        }if (mWallpaperSupported) {// Make sure we always have the most current wallpaper info.
@@ -1178,7 +1187,9 @@ public class StatusBar extends SystemUI implementsmHeadsUpManager.addListener(mVisualStabilityM

Android12动态控制SystemUI状态栏和导航栏相关推荐

  1. Android 7.0 SystemUI 之启动和状态栏和导航栏简介

    Android 7.0 SystemUI 之启动和状态栏和导航栏简介 一.SystemUI 是什么 首先SystemUI 是一个系统应用,apk路径位于/system/priv-app 源码路径位于: ...

  2. Android 12系统源码_SystemUI(五)自定义状态栏和导航栏视图

    前言 前面几篇文章我们具体分析了Android12系统原生的StatusBar和CarStatusBar的启动流程以及视图构建流程,本篇文章我们来自定义实现状态栏和导航栏视图. 一.为系统添加自定义状 ...

  3. 管理系统状态栏和导航栏(翻译)

    原文:https://developer.android.com/training/system-ui/index.html 管理系统UI system bars 是专用于显示设备的提醒和消息的区域. ...

  4. Android布局延伸状态栏,Android沉浸式全屏讲解(状态栏、导航栏处理)

    Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...

  5. android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现

    android api19开始我们就能对顶部状态栏和底部导航栏进行半透明处理了,而api21开始则可以实现全透明状态栏与导航栏以及开启沉浸模式,至于什么是沉浸模式,大家百度一下应该就都知道了,有一点需 ...

  6. android界面美化教程,android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现...

    android api19开始我们就能对顶部状态栏和底部导航栏进行半透明处理了,而api21开始则可以实现全透明状态栏与导航栏以及开启沉浸模式,至于什么是沉浸模式,大家百度一下应该就都知道了,有一点需 ...

  7. android 沉浸式菜单栏,Android沉浸式全屏讲解(状态栏、导航栏处理)

    Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...

  8. android 11.0 增加控制状态栏和导航栏的接口

    增加控制状态栏和导航栏的接口,代码如下 .../statusbar/NavigationBarController.java | 6 +-.../phone/NavigationBarFragment ...

  9. Android 状态栏, 标题栏, 导航栏,系统栏,应用栏的区别和解释

    如上图,可以看到,有状态栏(status bar).标题栏(action bar, toolbar).导航栏(navigation bar) 等, 状态栏 (status bar):是指手机最顶上,显 ...

  10. 【干货】Android系统定制基础篇:第十三部分(开放root权限、禁止应用旋转、隐藏状态栏和导航栏)

    一.Android开放root权限 Android 5.1 1.修改 su 源码(system\extras\su\su.c),注释下面代码: int main(int argc, char **ar ...

最新文章

  1. 项目的简单总结二--可拉伸的头视图
  2. 万能android调用webservice方法——参数类型不受限制
  3. 天池大赛 + CV语义分割 + 78万奖金:全国数字生态创新大赛来了!
  4. 考c语言三级需要什么软件,全国计算机三级网络技术上机考C语言的软件是什么哈?...
  5. IOS高级开发 runtime(一)
  6. java8函数式编程 视频_快速掌握Java8 Stream函数式编程技巧
  7. 跨境电商未来应该怎么走?
  8. 使用LoadRunner-运行负载测试
  9. halcon edges_sub_pix算子
  10. Centos7.x 在线安装Docker和离线安装 Docker
  11. c语言中listnode是什么意思,怎么理解typedef Node * List
  12. 一招判断三元催化堵塞_汽车的氧传感器和三元催化器故障如何判断呢?用这些方法判断...
  13. Python之Numpy常用操作
  14. 最小二乘法求线性回归方程_规范解题第14期 利用“最小二乘法”原理解一道题...
  15. Aspose.word设置页眉
  16. 【笔记】PCIe TLP Header 中的常见 Feild 及其释义
  17. 地形湿度指数(TWI)获取教程
  18. python给乘风破浪的姐姐制作词云打call图
  19. 音频的相关基础知识,这里有
  20. php可以用中文的单引号吗,PHP中单双引号用法误区

热门文章

  1. 通达OA11.7任意用户登录
  2. Postgresql中lsn的三种记录形式与相关代码
  3. HDU - 6229 Wandering Robots
  4. 移动电视显示服务器异常什么原因,移动远程服务器异常
  5. 牛客网python刷题_【牛客网】C/C++牛客网专项刷题(01)
  6. 大数据(8q)流计算updateStateByKey
  7. emoji字符无法写入Mysql数据库问题
  8. echart柱状图背景色
  9. Mybatis源码之连接池原理实现探究
  10. android 性能方面的东东