AndroidO SystemUI-QuickSettings

一.简述
QS是SystemUI中的一个功能吧,即下拉栏。(这里主要以Android 8.0平台源码阐述)

代码实现路径主要在:
alps/frameworks/base/packages/SystemUI/src/com/android/systemui/qs
这里写图片描述

二.常见详解
1.QS中的排序
排序的顺序是在xml中定义的在/frameworks/base/packages/SystemUI/res/values/config.xml 中,具体如下:
这里写图片描述

这里我们可以按照需求来排列各个QS,也可以添加自定义的QS啦。

2.QS中的行列
行列的加载这里用流程图来显示下,若需要修改的话可以自己去在关键流程中适配自己的需求。
这里写图片描述

(1)行数
代码中定义变量名:mColumns
变量名赋值:取1和quick_settings_num_columns 中最大值
这里写图片描述

(2)列数
代码中变量名:mMaxRows
变量名赋值:3
这里写图片描述

最终实现的方法在distributeTiles()函数中:
这里写图片描述

3.QS中各个Tile实现
其实套路都是一样的,只要套用,自定义Tile分分钟了。

(1)首先tile需要继承QSTileImpl
这里写图片描述

(2)添加interface 作为Controller类,
这里写图片描述

(3) 接口的实现类ControllerImpl,这里一般都是用来接收广播信息来处理的流程
这里写图片描述

(4)在自定义的tile类中首先要在构造函数中加入Controller,然后还需要重写如下这些方法,其中handleUpdateState()方法是核心方法,这里去设置QS的state的各个状态等。
这里写图片描述

这里写图片描述

4.某些应用实现在QS中的Tile
有些应用,比如google nearby,也会在QS中显示一个icon出来,这个操作正常下拉的时候是看不见的,需要点击edit后在编辑界面才能看到所有的QS Tile的。
流程如下:
这里写图片描述
之前主要为一个加载的流程,关键函数在addSystemTiles()/addPackageTiles()
这里写图片描述

当用户在Edit界面将tile移动到QS使用界面后,则会调用到CustomTile来实现长按跳转、短按切换状态等操作了。这个自己看下就明了,不是很难的。

5.QS中的图标实现流程
这个由于有需求需要做客制化,因此研究了下图标的显示,设计还是蛮巧妙的!
前面有说过每个Tiles的实现具体的实现函数是在handleUpdateState()中,而其中的各个状态(诸如:icon、state、slash、iconSupplier等)都会被写入到QSTile中。图标的写入显而易见是State.icon,如下:
这里写图片描述
具体icon set的流程如下,这个是个大致流程,里面还有细枝末节的东东可以自己研究(比如说Slash、即斜杠的实现,PS:google新增的一个需求,通过state.Slash来标识,若true,在setIcon的时候会去add SlashImageView,画出斜杠)
这里写图片描述

补充:PNG替换SVG格式图片

重点:最好有认识做UI的,对于他们来说分分钟的事情~~~

如果没有的话,一般只能借助网上一个在线转换的(一个电脑只能转10张),网址如下:
https://convertio.co/zh/

转换成SVG格式的之后的事情倒是很好做啦,我用的方法有2种,
A.Google的转换网页
http://inloop.github.io/svg2android/

B.使用Android Studio:
方法截图形式给出,其实操作很简单,如下:
这里写图片描述

这里写图片描述

三.总结
学无止境啦!大家有什么想讨论的可以留言哈。

猜你喜欢

转载自blog.csdn.net/zplxl99/article/details/74906133