一.简述
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:
方法截图形式给出,其实操作很简单,如下:

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

更多相关文章

  1. Android(安卓)Volley框架
  2. Android应用程序组件间通信(一)——Intent类简介
  3. Android(安卓)解决打包时提示65536问题
  4. android usb解析(二)UsbHostManager(and6.0)
  5. 居中显示并旋转 android Button 里的属性drawableLeft
  6. Android(安卓)Widget事件
  7. android 程序退出
  8. 【Android】Service学习之本地服务
  9. Android(安卓)5.0学习之定义阴影

随机推荐

  1. Android(安卓)中的拿来主义(编译,反编译,AX
  2. android菜单资源
  3. Android之值得开发者(安卓)必备的十八大开
  4. cocos2dx lua android按键反馈的消耗机制
  5. Android常用UI组件 - ListView
  6. Android(安卓)远程调试工具STF——开源项
  7. Android签名证书----Android新手笔记
  8. Android第三方应用集成到Android系统的解
  9. android AIDL RPC 机制
  10. android listview 中 item显示表格样式