Android 7.1原生設定項刪除
阿新 • • 發佈:2019-02-18
從原始碼中看到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" />,同裡如果我們要增加設定項,只要按不同的分類設定引數就行了。