1.在android/frameworks/base/core/res/res/values/symbols.xml声明图标字符
<java-symbol type="string" name="status_bar_xxx" />
2.在android/frameworks/base/core/res/res/values/config.xml指定显示顺序
<string-array name="config_statusBarIcons">
<item><xliff:g id="id">@string/status_bar_alarm_clock</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_rotate</xliff:g></item>...
+ <item><xliff:g id="id">@string/status_bar_xxx</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_airplane</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_battery</xliff:g></item>
</string-array>
+ <string translatable="false" name="status_bar_xxx">xxx</string>
字符串config_statusBarIcons中的顺序即Statusbar中显示顺序,该显示顺序可通过statusbar加载流程看出。
3.android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
在构造函数中
public class StatusBarIconControllerImpl extends StatusBarIconList implements Tunable,
ConfigurationListener, Dumpable, CommandQueue.Callbacks, StatusBarIconController {public StatusBarIconControllerImpl(Context context) {
super(context.getResources().getStringArray(
com.android.internal.R.array.config_statusBarIcons));
将整个数组值传递给StatusBarIconList的构造函数
4.android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
public StatusBarIconList(String[] slots) {
final int N = slots.length;
for (int i=0; i < N; i++) {
mSlots.add(new Slot(slots[i], null));
}
}
在StatusBarIconList中,会将数组拆分,一个一个按顺序添加。因此,只要将config_statusBarIcons顺序调整,即可订制Statusbar中图标显示顺序。
具体的图标加载,可以参考