删除原生Setting中无用的功能(移除Preference)

移除Setting中不需要的原生功能节点方法分享


原生Setting的界面是使用Preference而不是View来创建的,同时需要特殊的Activity或者Fragment的子类来显示: 如:PreferenceFragment和PreferenceActivity

原生的Setting应用所包含的功能比较全面,但通常开发中总是遇到需要裁剪和定制原生应用的需求,定制需求各有不同,刚接触这类需求时,可能第一时间想到的是屏蔽UI,但在Preference没有类似View那样好用的隐藏方法,这里介绍一下如何删除不需要的功能及子功能。

getPreferenceScreen().removePreference(findPreference("_key"));//删除整个一级节点
 ((PreferenceGroup)findPreference("_key")).removeAll();//删除该节点下的全部子节点,并保留该节点
 ((PreferenceGroup)findPreference("_key")).removePreference(findPreference("_key2"));//删除二级子节点

示例代码:版本Android P
main\res\xml\wifi_setting.xml wifi设置界面

<PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:settings="http://schemas.android.com/apk/res-auto"
        android:title="@string/wifi_settings"
        settings:keywords="@string/keywords_wifi">
	<PreferenceCategory
        	android:key="connected_access_point"
        	android:layout="@layout/preference_category_no_label"/>
	<PreferenceCategory
       	 	android:key="access_points"
        	android:layout="@layout/preference_category_no_label"/>
	<PreferenceCategory
        	android:key="additional_settings"
        	android:layout="@layout/preference_category_no_label">
		<Preference
                	android:key="configure_settings"
                	android:title="@string/wifi_configure_settings_preference_title"
                	android:fragment="com.android.settings.wifi.ConfigureWifiSettings" />
                <Preference
                	android:key="saved_networks"
                	android:title="@string/wifi_saved_access_points_label"
                	android:fragment="com.android.settings.wifi.SavedAccessPointsWifiSettings" />
                	</PreferenceCategory>
</PreferenceScreen>

main\com\android\settings\wifi\WifiSettings.java wifi设置界面对应java文件

...
@Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // TODO(b/37429702): Add animations and preference comparator back after initial screen is
        // loaded (ODR).
        setAnimationAllowed(false);
 	addPreferences();
 	mIsRestricted = isUiRestricted();
 	/**
         * daipi add 删除功能节点
         */
        getPreferenceScreen().removePreference(findPreference("additional_settings"));
    }
    private void addPreferences() {
        addPreferencesFromResource(R.xml.wifi_settings);
        mConnectedAccessPointPreferenceCategory =
                (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
        mAccessPointsPreferenceCategory =
        (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS);
        mAdditionalSettingsPreferenceCategory =
        (PreferenceCategory) findPreference(PREF_KEY_ADDITIONAL_SETTINGS);
        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
        mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
        Context prefContext = getPrefContext();
        mAddPreference = new Preference(prefContext);
        mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
        mAddPreference.setTitle(R.string.wifi_add_network);
        mStatusMessagePreference = new LinkablePreference(prefContext);
        mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
    }
    ...

如示例中删除功能节点注释处的代码,在原生代码添加功能节点后,删除了wifi界面的一个子功能项。

以上就是删除Preference功能节点的方法,其他功能界面同样找到不需要的功能key,按上述方法删除即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值