Android12 Settings页面子项目管控
Settings一级菜单加载的xml文件路径和源码如下(部分源码)
\packages\apps\Settings\res\xml\top_level_settings.xml
<Preference
android:fragment="com.android.settings.network.NetworkDashboardFragment"
android:icon="@drawable/ic_settings_wireless"
android:key="top_level_network"
android:order="-150"
android:title="@string/network_dashboard_title"
android:summary="@string/summary_placeholder"
settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/>
<Preference
android:fragment="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment"
android:icon="@drawable/ic_devices_other"
android:key="top_level_connected_devices"
android:order="-140"
android:title="@string/connected_devices_dashboard_title"
android:summary="@string/connected_devices_dashboard_default_summary" settings:controller="com.android.settings.connecteddevice.TopLevelConnectedDevicesPreferenceController"/>
<Preference
android:key="top_level_smartcontrols"
android:title="@string/smart_controls"
android:icon="@drawable/ic_smart_controls"
android:order="-15"
android:fragment="com.unisoc.settings.smartcontrols.SmartControlsSettings"
settings:controller="com.unisoc.settings.smartcontrols.TopLevelSmartControlsPreferenceController"/>
每个Preference都是一级菜单的子项目,每个fragment是继承DashboardFragment,如果子类没写onPreferenceTreeClick方法的话,点击某个菜单项后(一级,二级,三级)都会执行DashboardFragment.java里的 onPreferenceTreeClick方法,不return super.onPreferenceTreeClick(preference);就可以拦截点击后的跳转(同理,二级跳三级也可),路径和源码如下: \packages\apps\Settings\src\com\android\settings\dashboard\DashboardFragment.java
public boolean onPreferenceTreeClick(Preference preference) {
final Collection<List<AbstractPreferenceController>> controllers =
mPreferenceControllers.values();
for (List<AbstractPreferenceController> controllerList : controllers) {
for (AbstractPreferenceController controller : controllerList) {
if (controller.handlePreferenceTreeClick(preference)) {
// log here since calling super.onPreferenceTreeClick will be skipped
writePreferenceClickMetric(preference);
return true;
}
}
}
return super.onPreferenceTreeClick(preference);
}