在Android项目开发中,客户要求精简Settings,也就是删除部分不需要或者无用的功能,因此需要影藏Preference等,下面是摘抄网友并自己加工整理的。
隐藏 Preference 有两种方法:
一、先在xml布局里面删,然后在java里面删掉调用的相关部分,但如果很多地方都有调用,那么删除就很麻烦;
二、用removePreference(Preference preference) 方法 删除;
由于第一种方式可能涉及的代码量多也容易引入新bug,因此个人推荐使用第二种方式,简单,快捷,安全。
比如Settings中的privacy_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/privacy_settings_title">
<!-- Backup settings -->
<PreferenceScreen
android:key="backup_data"
android:title="@string/backup_data_title"
android:persistent="false"
android:fragment="com.android.settings.backup.ToggleBackupSettingFragment"/>
<PreferenceScreen
android:key="configure_account"
android:title="@string/backup_configure_account_title"
android:persistent="false">
<!-- the Intent declared here is always overwritten by a real one -->
<intent android:action="dummy" />
</PreferenceScreen>
<SwitchPreference
android:key="auto_restore"
android:title="@string/auto_restore_title"
android:summary="@string/auto_restore_summary"
android:persistent="false" />
<Preference
android:key="backup_inactive"
android:title="@string/backup_inactive_title"
android:persistent="false"
android:enabled="false"
android:selectable="false" />
<!-- Network reset -->
<PreferenceScreen
android:key="network_reset"
android:title="@string/reset_network_title"
settings:keywords="@string/keywords_network_reset"
android:fragment="com.android.settings.ResetNetwork" />
<!--M: add DRM Settings start-->
<PreferenceScreen
android:key="drm_settings"
android:title="@string/drm_settings_title"
android:summary="@string/drm_settings_summary"
android:fragment="com.mediatek.settings.DrmSettings"/>
<!--M: add DRM Settings end-->
<!-- Factory reset -->
<PreferenceScreen
android:key="factory_reset"
android:title="@string/master_clear_title"
settings:keywords="@string/keywords_factory_data_reset"
android:fragment="com.android.settings.MasterClear" />
</PreferenceScreen>
这个部分就是Android 重置部分,显示有[网络重置]和[恢复出厂设置]等,现在项目中要求我影藏[网络重置]这个选项。
下面是我实际中设计的代码:
private static final String NETWORK_RESET = "network_reset";
//在onCreate()方法中调用
//只删除network_reset这个选项
final PreferenceScreen screen = getPreferenceScreen();
screen.removePreference((PreferenceScreen) screen.findPreference(NETWORK_RESET));
//删除此父选项中的所有子选项,比如network_reset和factory_reset等
screen.removeAll();
本文参考《隐藏(删除) Preference 小结》
https://www.biumall.com/ 笔友城堡,为你导航!
© 版权声明