Android 7.1原生設定項刪除
從原始碼中看到Settings繼承SettingsActivity,而SettingsActivity繼承SettingsDrawerActivity,在SettingsDrawerActivity的onCreate方法中,我們看到呼叫了getDashboardCategories方法,程式碼:
getDashboardCategories();//獲取設定項列表
setActionBar(toolbar);
mDrawerAdapter = new SettingsDrawerAdapter(this);
ListView listView = (ListView) findViewById(R.id.left_drawer);
listView.setAdapter(mDrawerAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(Android.widget.AdapterView<?> parent, View view, int position,
long id) {
onTileClicked(mDrawerAdapter.getTile(position));
}
});
跟進到該方法的具體實現:
public List<DashboardCategory> getDashboardCategories() {
if (sDashboardCategories == null) {
sTileCache = new HashMap<>();
sConfigTracker = new InterestingConfigChanges();
// Apply initial current config.
boolean newC =sConfigTracker.applyNewConfig(getResources());
Log.d(TAG, "newC = " + newC);
sDashboardCategories = TileUtils.getCategories(this, sTileCache);//重點在這裡
}
return sDashboardCategories;
}
跟進到getCategories方法:
private static final String EXTRA_SETTINGS_ACTION =
"com.android.settings.action.EXTRA_SETTINGS";
/**
* Same as #EXTRA_SETTINGS_ACTION but used for the platform Settings activities.
*/
private static final String SETTINGS_ACTION =
"com.android.settings.action.SETTINGS";
private static final String OPERATOR_SETTINGS =
"com.android.settings.OPERATOR_APPLICATION_SETTING";
private static final String OPERATOR_DEFAULT_CATEGORY =
"com.android.settings.category.wireless";
private static final String MANUFACTURER_SETTINGS =
"com.android.settings.MANUFACTURER_APPLICATION_SETTING";
private static final String MANUFACTURER_DEFAULT_CATEGORY =
"com.android.settings.category.device";
//以上是TileUtils.java定義的常量
public static List<DashboardCategory> getCategories(Context context,
HashMap<Pair<String, String>, Tile> cache) {
//......省略
for (UserHandle user : userManager.getUserProfiles()) {
// TODO: Needs much optimization, too many PM queries going on here.
if (user.getIdentifier() == ActivityManager.getCurrentUser()) {
// Only add Settings for this user.
getTilesForAction(context, user, SETTINGS_ACTION, cache, null, tiles, true);
getTilesForAction(context, user, OPERATOR_SETTINGS, cache,
OPERATOR_DEFAULT_CATEGORY, tiles, false);
getTilesForAction(context, user, MANUFACTURER_SETTINGS, cache,
MANUFACTURER_DEFAULT_CATEGORY, tiles, false);
}
if (setup) {
getTilesForAction(context, user, EXTRA_SETTINGS_ACTION, cache, null, tiles, false);
}
}
//......省略
return categories;
}
到這裡我們就可以看得到,這是根據AndroidManifest.xml對activity及fragement的定義來劃分設定項分類的。我們再看一下AndroidManifest.xml對各個activity及fragment的定義,拿個簡單的來看看:
<activity android:name="Settings$AppMemoryUsageActivity"
android:label="@string/app_list_memory_use"
android:icon="@drawable/ic_settings_memory">
<intent-filter>
<action android:name="android.settings.APP_MEMORY_USAGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!-- <meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.device" /> -->
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.applications.ProcessStatsUi" />
</activity>
這裡我們只要前設定項分類去掉就能夠刪除掉這一設定項<meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.device" />,同裡如果我們要增加設定項,只要按不同的分類設定引數就行了。
Linux公社的RSS地址 :ofollow,noindex" target="_blank">https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-09/1544664.htm