system UI预置的(QSTile),第三方应用添加的(CustiomTile 7.0 才有的)
一、 创建自定义的Tile
二、Tile加载流程
Tile中方法
handleClick() 短按
getLongClickIntent() 长按
handleUpdateState() 更新状态
handleSecondaryClick() 点击开关label显示详情页
getToggleState() 若返回null详情页不显示switch开关。
getSettingsIntent() 跟长按的intent一样进入设置对应的界面。若返回null详情页不显示详细信息。
(1) 动作的监听响应:
在handleClick() 方法里处理点击事件;打开/关闭的动画也在这里调用;
部分开关需要重写handleSecondaryClick() 方法,例如Wi-Fi和蓝牙开关,在handleSecondaryClick() 方法里打开详情页面;
还有开关需要重写handleLongClick() ,例如反色和热点开关,在这里打开询问是否要隐藏的对话框;
在setListening() 方法里添加回调监听,接受action和注册广播等。
(2) 状态的管理:
状态管理通过一个由Host提供的looper来进行。
每个快捷开关在handleUpdateState()中更新状态。回调影响状态要通过快捷开关的工作looper调用refreshState() 来触发另一个状态更新。
状态类有三种,State类以及继承自State类的BooleanState类和SignalState类。需要判断开关与否的状态的快捷开关继承QSTile<QSTile.BooleanState>,
包括飞行模式、反色、手电筒、热点、定位、自动旋转、蓝牙和屏幕投射开关等;还需要判断连接等状态的快捷开关继承QSTile<QSTile.SignalState>,例如Wi-Fi和移动数据网络开关;其他直接继承QSTile<QSTile.State>。
(3) 另外,Wi-Fi和蓝牙开关需要重写supportsDualTargets() 方法和getDetailAdapter() 方法。因为这两个开关是绘制在一排两个开关的布局上而且需要显示详情页面。