当前位置: 首页 > news >正文

Android SystemUI 介绍

目录

一、什么是SystemUI

二、SystemUI应用源码

三、学习 SystemUI 的核心组件

四、修改状态与导航栏测试


      本篇文章,主要科普的是Android SystemUI , 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。

一、什么是SystemUI

     什么是SystemUI?Android SystemUi是指Android操作系统中的系统用户界面,它是用户与设备交互的界面。 SystemUi提供了状态栏、导航栏、通知中心等重要的用户界面元素,这些元素可以帮助用户快速地访问设备的各种功能和信息。主要模块如下:

1、NavigationBar(导航栏):NavigationBar是位于屏幕底部的导航界面,提供了返回、主页和最近任务等导航操作的按钮。它使用户能够浏览应用程序和系统功能,如切换应用、返回主屏幕等。

2、StatusBar(状态栏):StatusBar是Android SystemUI的核心组件之一,位于屏幕顶部。它显示了通知图标、系统图标(如电池、信号强度、时间等)以及其他与系统状态相关的信息。

3、Notification Shade(通知面板):Notification Shade是一个可下拉的面板,用户可以从任何屏幕位置向下滑动以展开它。它显示了来自各个应用程序的通知,并提供一些快速设置选项,如Wi-Fi、蓝牙、飞行模式等。

4、LockScreen(锁屏界面):LockScreen是Android设备的初始界面,显示了时间、日期、通知和快捷操作。用户可以在锁屏界面上查看和管理通知,以及执行一些快速操作,如解锁屏幕、调整音量等。

5、Quick Settings(快速设置):Quick Settings是通知面板中的一部分,提供了一组常用的系统设置选项,用户可以通过快速切换按钮打开或关闭这些选项,例如调整屏幕亮度、打开/关闭无线网络等。

6、SystemUI Tuner(系统UI调节器):SystemUI Tuner是一个隐藏的设置菜单,允许用户自定义和调整系统UI的某些功能和外观。用户可以通过SystemUI Tuner修改状态栏图标、导航栏按钮、通知行为等。

7、System Bars(系统栏):系统栏包括StatusBar和NavigationBar,它们作为Android设备的固定元素,提供了对系统功能和导航的访问。系统栏的样式和行为可以根据不同设备和版本进行自定义

版本变化

时间段    系统版本    发展历程
2008年    Android 1.0    Android初始版本没有状态栏,只有应用程序屏幕
2009年    Android 1.5    引入状态栏,但只有通知和电池指示器
2010年    Android 2.3    状态栏加入了快捷设置面板
2011年    Android 4.0    引入了新的状态栏,支持通知和快捷设置面板
2013年    Android 4.4    状态栏和导航栏支持半透明效果
2014年    Android 5.0    引入Material Design,对状态栏和导航栏进行了全面更新
2016年    Android 7.0    引入了快捷应用程序快捷方式,可从状态栏访问
2019年    Android 10.0    状态栏和导航栏支持全面屏手势导航
2020年    Android 11.0    加入了对新型折叠式设备的支持,如Galaxy Z Fold2
2021年    Android 12.0    引入了Material You设计语言,使状态栏和导航栏更加自适应                2022年    Android 13.0    沿用了Material You设计语言,加入了一些细节                                          2023年    Android 14.0    待更新

二、SystemUI应用源码

        前提是下载Android系统源码,在android12/frameworks/base/packages/SystemUI目录下,其中android12为创建系统源码下载文件位置。在此目录下,你可以找到SystemUI应用的所有源代码文件,包括Java源代码文件、资源文件和布局文件等。如果你想查看和修改SystemUI应用的源代码,可以使用Android Studio等集成开发环境打开该目录,并进行相应的操作。

三、学习 SystemUI 的核心组件

上述核心服务之外,SystemUI 还包含了很多核心组件,如 ViewGroup、View、Drawable、Animation、Layout 等等。在阅读 SystemUI 源码时,需要对这些组件进行一一了解和分析。

其中比较重要的组件有:

BaseStatusBar: 状态栏基础类,负责状态栏的显示和隐藏,以及状态栏中各个 View 的管理。

StatusBarWindowView: 状态栏窗口视图,负责渲染状态栏的整个界面。

NotificationStackScrollLayout: 通知滑动布局,负责管理通知在状态栏中的展示。

RecentsView: 最近任务视图,负责可视化呈现最近任务列表。

KeyguardViewMediator: 锁屏视图中介,负责管理锁屏界面的显示和隐藏

四、修改状态与导航栏测试

        关于Android系统  SystemUI 状态栏(StatusBar)和导航栏(Navigationbar)高度修改,其

路径:frameworks/base/core/res/res/values/dimens.xml,

Navigationbar默认高度48dp

StatusBar高度默认是24dp

编译运行测试

参考

Android SystemUI篇(一)-CSDN博客

Android SystemUI的客制化 (1)_android.uid.systemui-CSDN博客

相关文章:

  • 堆和堆排序【数据结构】
  • MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)
  • Ubuntu2204+ROS2(humble)+usb_cam内参标定
  • 计算机网络之ARP协议
  • 【MQ02】基础简单消息队列应用
  • php获取网卡的MAC地址原码;目前支持WIN/LINUX系统
  • Likeshop多商户商城源码系统,支持二开
  • 构建知识图谱:从技术到实战的完整指南
  • React16源码: React中context-stack的源码实现
  • C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”
  • 消息中间件之八股面试回答篇:三、RabbitMQ如何解决消息堆积问题(100万条消息堆积)+RabbitMQ高可用性和强一致性机制+回答模板
  • Datawhale 组队学习Task8大模型的有害性(上/下)
  • 毕业找工作只会C语言是不是完蛋了?
  • 当代码遇上玄学……
  • SRE-Redis基本概念篇
  • Django 博客开发教程 8 - 博客文章详情页
  • ES6系列(二)变量的解构赋值
  • in typeof instanceof ===这些运算符有什么作用
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • oldjun 检测网站的经验
  • QQ浏览器x5内核的兼容性问题
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue:响应原理
  • 从tcpdump抓包看TCP/IP协议
  • 近期前端发展计划
  • 如何解决微信端直接跳WAP端
  • 在Unity中实现一个简单的消息管理器
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (LeetCode) T14. Longest Common Prefix
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (接口自动化)Python3操作MySQL数据库
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)IOS中获取各种文件的目录路径的方法
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net FrameWork总结
  • .net 使用ajax控件后如何调用前端脚本
  • .NET的微型Web框架 Nancy
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET关于 跳过SSL中遇到的问题
  • .NET框架设计—常被忽视的C#设计技巧
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • [51nod1610]路径计数
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [codeforces]Recover the String
  • [codevs1288] 埃及分数
  • [CSS]中子元素在父元素中居中
  • [C语言]一维数组二维数组的大小
  • [Git 1]基本操作与协同开发
  • [JS]数据类型
  • [kubernetes]控制平面ETCD
  • [linux] GFLOPS和TFLOPS的换算
  • [linux] git lfs install 安装lfs