[RK3399][Android7.1] 调试笔记 --- 移除/删除Settings的Preference的三种方法小结

Platform: RK3399-MID
OS: Android 7.1.2
Kernel: v4.4.83

需求:

整理一下移除/删除Settings的Preference三种方法;

方法一:对于 PreferenceScreen采用removePreference或者removeAll删除;

上图图1中的“字体大小”以及图2的“系统”称为一级节点,图2的“字体大小”称为二级节点;

先附上xml文件;

packages/apps/Settings/res/xml/display_settings.xml

        <PreferenceScreen
                android:key="font_size"
                android:title="@string/title_font_size"
                android:fragment="com.android.settings.accessibility.ToggleFontSizePreferenceFragment"
                settings:keywords="@string/keywords_display_font_size" />

        <com.android.settings.display.ScreenZoomPreference
                android:key="screen_zoom"
                android:title="@string/screen_zoom_title"
                settings:keywords="@string/screen_zoom_keywords" />

        <DropDownPreference
                android:key="auto_rotate"
                android:summary="%s"
                android:title="@string/display_auto_rotate_title" />

packages/apps/Settings/res/xml/accessibility_settings.xml

    <PreferenceCategory
            android:key="system_category"
            android:title="@string/accessibility_system_title">

        <PreferenceScreen
            android:fragment="com.android.settings.accessibility.CaptionPropertiesFragment"
            android:key="captioning_preference_screen"
            android:title="@string/accessibility_captioning_title" />

        <PreferenceScreen
            android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
            android:key="screen_magnification_preference_screen"
            android:title="@string/accessibility_screen_magnification_title"/>

        <PreferenceScreen
            android:fragment="com.android.settings.accessibility.ToggleFontSizePreferenceFragment"
            android:key="font_size_preference_screen"
            android:title="@string/title_font_size"/>

        <com.android.settings.display.ScreenZoomPreference
            android:key="screen_zoom"
            android:title="@string/screen_zoom_title"/>

PreferenceCategory和PreferenceScreen都属于PreferenceGroup的子类,PreferenceCategory可以用于分类,且不可被点击;

对于PreferenceCategory,有如下两个API用于移除Preference;

public boolean removePreference(Preference preference)  //从group中移除  返回是否移除成功
public void removeAll( ) //移除group中所有的preference

对于PreferenceScreen的一级节点,则可以使用以下API进行移除;

Preference p = findPreference(KEY_LED_SETTINGS);
getPreferenceScreen().removePreference(p);

 也可以采用如下的方式;

removePreference(KEY_LED_SETTINGS);

附上Patch

diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
old mode 100644
new mode 100755
index 62671fa..e936dc3
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -214,6 +214,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
         super.onCreate(icicle);
         addPreferencesFromResource(R.xml.accessibility_settings);
         initializeAllPreferences();
+        mSystemsCategory.removePreference(mFontSizePreferenceScreen);
         mDpm = (DevicePolicyManager) (getActivity()
                 .getSystemService(Context.DEVICE_POLICY_SERVICE));
     }
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 78e0647..dea9465 100755
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -253,6 +253,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
             mNightModePreference.setValue(String.valueOf(currentNightMode));
             mNightModePreference.setOnPreferenceChangeListener(this);
         }
+        getPreferenceScreen().removePreference(mFontSizePref);
     }

方法二:对于 WIFI、蓝牙等处于设置第一页的设置项

直接上Patch

diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 152a949..3dacbf6 100755
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -1062,7 +1062,7 @@ public class SettingsActivity extends SettingsDrawerActivity

         String packageName = getPackageName();
         setTileEnabled(new ComponentName(packageName, WifiSettingsActivity.class.getName()),
-                pm.hasSystemFeature(PackageManager.FEATURE_WIFI), isAdmin, pm);
+                pm.hasSystemFeature(PackageManager.FEATURE_WIFI) && false, isAdmin, pm);

         setTileEnabled(new ComponentName(packageName,
                 Settings.BluetoothSettingsActivity.class.getName()),

方法三:对于直接在xml文件中绘制的UI界面

直接上Patch

diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
old mode 100644
new mode 100755
index 11cde5e..7f96032
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -43,9 +43,9 @@
             android:key="font_size_preference_screen"
             android:title="@string/title_font_size"/>

-        <com.android.settings.display.ScreenZoomPreference
+        <!--<com.android.settings.display.ScreenZoomPreference
             android:key="screen_zoom"
-            android:title="@string/screen_zoom_title"/>
+            android:title="@string/screen_zoom_title"/>-->

         <PreferenceScreen

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值