Android 下拉状态栏快捷开关

快捷栏的创建在QSFactoryImpl.java中:
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java

private QSTileImpl createTileInternal(String tileSpec) {    // Stock tiles.    switch (tileSpec) {        case "wifi":            return new WifiTile(mHost);        case "bt":            return new BluetoothTile(mHost);        case "cell":        ..........    }    // Intent tiles.    if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(mHost, tileSpec);    if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(mHost, tileSpec);    // Debug tiles.    if (Build.IS_DEBUGGABLE) {        if (tileSpec.equals(GarbageMonitor.MemoryTile.TILE_SPEC)) {            return new GarbageMonitor.MemoryTile(mHost);        }    }    return null;}

快捷栏 tile 的加载在 QSTileHost.java 的 loadTileSpecs 函数中,defaultTileList 是 tile 的顺序 ,在 quick_settings_tiles_default 中定义。
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java

protected List<String> loadTileSpecs(Context context, String tileList) {    final Resources res = context.getResources();    final String defaultTileList = res.getString(R.string.quick_settings_tiles_default);    if (tileList == null) {        tileList = res.getString(R.string.quick_settings_tiles);        if (DEBUG) Log.d(TAG, "Loaded tile specs from config: " + tileList);    } else {        if (DEBUG) Log.d(TAG, "Loaded tile specs from setting: " + tileList);    }    final ArrayList<String> tiles = new ArrayList<String>();    boolean addedDefault = false;    for (String tile : tileList.split(",")) {        tile = tile.trim();        if (tile.isEmpty()) continue;        if (tile.equals("default")) {            if (!addedDefault) {                tiles.addAll(Arrays.asList(defaultTileList.split(",")));                addedDefault = true;            }        } else {            tiles.add(tile);        }    }    return tiles;}

quick_settings_tiles_default 在这里定义:
/frameworks/base/packages/SystemUI/res/values/config.xml

<!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" --><string name="quick_settings_tiles_stock" translatable="false">    wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night</string>

每个 title 都写成了一个类,继承QSTileImpl.java。
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/
Android Q 下拉状态栏快捷开关解析_第1张图片
WifiTile 就是 wifi 的快捷键:
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java

handleUpdateState wifi状态发生改变时调用

关注公众号,获取更多开发必备知识
在这里插入图片描述

更多相关文章

  1. Switch自定义
  2. Android onMeasure自定义
  3. 不使用布局文件,代码中自定义界面
  4. Android定义宽高比控件
  5. 【Android】自定义权限
  6. Android高手进阶教程(三)之----Android 中自定义View的应用.
  7. 自定义menu替代TabHost中的TabWidget
  8. Android自定义dialog以及如何去除黑色背景

随机推荐

  1. android中 MediaStore提取缩略图和原始图
  2. Android(安卓)数据存储之文件存储小记
  3. android中context
  4. Android:EditText学习总结
  5. 3.EditText控件
  6. android Makefile
  7. Android(安卓)UI设计——EditText控件
  8. android:configChanges
  9. 初探Android
  10. android 快速入门之一 “Hello world”,以