此文章是摘抄的,作为影藏系统设置中的部分选项还是有效的。
本文修改基于mtk6.0系统
隐藏一个一级菜单
源码位置 packages/apps/Settings/src/com/android/settings/SettingsActivity.java;
private int[] SETTINGS_FOR_RESTRICTED = {
R.id.wireless_section,
R.id.wifi_settings,
R.id.bluetooth_settings,
R.id.location_settings,
R.id.security_settings,
...
};
例如隐藏位置项
①修改updateTilesList()方法,添加:
private void updateTilesList(List<DashboardCategory> target) {
....
// Ids are integers, so downcasting is ok
int id = (int) category.id;
int n = category.getTilesCount() - 1;
while (n >= 0) {
....
} else if (id == R.id.location_settings) {
removeTile=true;
}
....
if (removeTile && n < category.getTilesCount()) {
category.removeTile(n); //移除
}
n--;
}
当removeTile = true时,这个tile所在组会将此tile移除。
②直接注释packages/apps/Settings/res/xml/dashboard_categories.xml中关于位置项
+ <!-- Location -->
<dashboard-tile
android:id="@+id/location_settings"
android:title="@string/location_settings_title"
android:fragment="com.android.settings.location.LocationSettings"
android:icon="@drawable/ic_settings_location"
/>
+ -->
mainifest中关于LocationSettings的也要注释掉。
隐藏一个二级菜单
①可直接找到所在xml文件,直接注释
<PreferenceCategory android:key="device_admin_category"
android:title="@string/device_admin_title"
android:persistent="false">
<Preference android:key="manage_device_admin"
android:title="@string/manage_device_admin"
android:summary="@string/manage_device_admin_summary"
android:persistent="false"
android:fragment="com.android.settings.DeviceAdminSettings"/>
+ <!-- <SwitchPreference android:key="toggle_install_applications_validation"
android:title="@string/install_validation"
android:summaryOn="@string/install_unknown_applications_validation"
android:summaryOff="@string/install_unknown_applications_validation"
+ android:persistent="false" /> -->
<SwitchPreference android:key="toggle_install_applications"
android:title="@string/install_applications"
android:summaryOff="@string/install_unknown_applications"
android:summaryOn="@string/install_unknown_applications"
android:persistent="false" />
</PreferenceCategory>
②在代码中移除
deviceAdminCategory.removePreference(mToggleAppInstallationInvalidation);
deviceAdminCategory就是目标所在的PreferenceCategory 。
settings设置中直接移除整个组
如:无线和网络,设备,个人,系统。移除设备组为例
源码位置 packages/apps/Settings/src/com/android/settings/SettingsActivity.java;
public static void loadCategoriesFromResource(int resid, List<DashboardCategory> target,
Context context) {
XmlResourceParser parser = null;
try {
parser = context.getResources().getXml(resid);
AttributeSet attrs = Xml.asAttributeSet(parser);
int type;
while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
&& type != XmlPullParser.START_TAG) {
// Parse next until start tag is found
}
... // dashboard-categories.xml解析
-
- target.add(category);
+ if (category.key.equals("com.android.settings.category.device")) {
+
+ }else {
+ target.add(category);
+ }
} else {
XmlUtils.skipCurrentTag(parser);
}
你想隐藏哪个组,就不把它加入到List数组中。
四个组所对应的key值在,donottranslate.xml中定义
* <li>com.android.settings.category.wireless</li>
* <li>com.android.settings.category.device</li>
* <li>com.android.settings.category.personal</li>
* <li>com.android.settings.category.system</li>
测试有效。
本文摘抄于:https://blog.csdn.net/wxd_csdn_2016/article/details/84791287
© 版权声明