概要
Settings 隐藏一级菜单,可以通修改以下两个文件分别实现 AndroidManifest.xml
和 SettingsActivity.java
指定选项隐藏
Settings 隐藏二级菜单,则需要找到对应布局进行修改
隐藏Settings的一级菜单
方法1 : 修改AndroidManifest.xml
文件 (\packages\apps\Settings\AndroidManifest.xml
)
例子:隐藏无障碍菜单
修改前
<activity
android:name="Settings$AccessibilitySettingsActivity"
android:label="@string/accessibility_settings"
android:icon="@drawable/ic_homepage_accessibility"
android:configChanges="orientation|keyboardHidden|screenSize"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.ACCESSIBILITY_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<!--在此处添加注释,用于隐藏无障碍功能的显示,priority是用于定义优先级,值越大优先级越高,菜单越靠前-->
<!--<intent-filter android:priority="2">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter> -->
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.homepage" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.accessibility.AccessibilitySettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
<meta-data android:name="com.android.settings.summary"
android:resource="@string/accessibility_settings_summary" />
</activity>
修改后
方法2 : 单独修改SettingsActivity.java
文件,无须修改AndroidManifest.xml
的内容
(\packages\apps\Settings\src\com\android\settings\SettingsActivity.java
)
例子:隐藏无障碍菜单
private void doUpdateTilesList() {
······
//add by Lang stert
somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
Settings.AccessibilitySettingsActivity.class.getName()),//如需隐藏其他选项,可修改在SettingsGateway.SETTINGS_FOR_RESTRICTED内定义的信息即可
false, isAdmin)//设置为false后,表示不再显示。
|| somethingChanged;
//add by Lang end
······
}
通过判断component
,在SettingsGateway.SETTINGS_FOR_RESTRICTED
存储的信息判断是否存在后,通过setTileEnabled()
方法设置是否显示
private boolean setTileEnabled(StringBuilder changedList, ComponentName component,
boolean enabled, boolean isAdmin) {
if (UserHandle.MU_ENABLED && !isAdmin && getPackageName().equals(component.getPackageName())
&& !ArrayUtils.contains(SettingsGateway.SETTINGS_FOR_RESTRICTED,
component.getClassName())) {
enabled = false;
}
boolean changed = setTileEnabled(component, enabled);
if (changed) {
changedList.append(component.toShortString()).append(",");
}
return changed;
}
}
隐藏Settings的二级菜单
提示:这里可以添加技术名词解释
以Settings一级菜单系-系统选项-二级菜单-手势选项-为例
\packages\apps\Settings\res\xml\system_dashboard_fragment.xml 找到其中布局设置中的位置,注释掉以下就可以了
<!-- 注释相关信息 -->
<!--<Preference
android:key="gesture_settings"
android:title="@string/gesture_preference_title"
android:icon="@drawable/ic_settings_gestures"
android:order="-250"
android:fragment="com.android.settings.gestures.GestureSettings"
settings:controller="com.android.settings.gestures.GesturesSettingPreferenceController"/>
-->