Android settings中SwitchPreference的简单处理

来源:互联网 发布:qq飞车s车数据 编辑:程序博客网 时间:2024/05/17 04:28

在settings(设置)中使用了大量的SwitchPreference,这是一个开关,用户通过开关进行系统设置。
SwitchPreference在settings中是这样布局的:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"        android:title="@string/display_settings"         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">        <PreferenceCategory            android:key="display_system"            android:title="@string/ali_display_system">            <Preference                android:key="ali_lock_screen_more"                android:title="@string/ali_lock_screen_settings_more_tile" >                <intent                    android:action="android.intent.action.MAIN"                    android:targetClass="com.android.keyguard.ConfigActivity"                    android:targetPackage="com.android.keyguard" />            </Preference>            <SwitchPreference                 android:key="mistake_touch_mode_key"                                                       android:summary="@string/mistake_touch_mode_setting_summary"                                     android:title="@string/mistake_touch_mode_setting" />        </PreferenceCategory></PreferenceScreen>

PreferenceCategory可以放入一些Preference,SwitchPreference,形成具有条理性的布局。本次以mistake_touch_mode_key为例。

接下来自然是初始化了:

private SwitchPreference mMistakeTouchPreference;private static final String MISTAKE_TOUCH_MODE_KEY = "mistake_touch_mode_key";
private void initMistakeTouchPreference() {        mMistakeTouchPreference = (SwitchPreference)findPreference(MISTAKE_TOUCH_MODE_KEY);        if(REMOVE_MISTAKETOUCH ){                                        //getPreferenceScreen().removePreference(mMistakeTouchPreference);            ((PreferenceCategory)findPreference(KEY_DISPLAY_SYSTEM)).removePreference(mMistakeTouchPreference);//屏蔽此开关            return;        }            int mistake_touch_mode_on  = Settings.System.getInt(AliDisplaySettings.this.getContentResolver(),"sys.mistaketouch.switch",0);         mMistakeTouchPreference.setChecked(mistake_touch_mode_on == 1);        mMistakeTouchPreference.setOnPreferenceChangeListener(this);    }

SwitchPreference的默认值存在“sys.mistaketouch.switch”中,=0为开关关闭。

其状态变化的处理在onPreferenceChange方法中:

public boolean onPreferenceChange(Preference preference, Object objValue) {        final String key = preference.getKey();        if (MISTAKE_TOUCH_MODE_KEY.equals(key)){            if (mMistakeTouchPreference.isChecked() != (Boolean)objValue) {                AliUserTrackUtils.click("AliDisplaySettings", preference.getKey(), (Boolean)objValue);                boolean value = (Boolean)(objValue);                mMistakeTouchPreference.setChecked(value);              Settings.System.putInt(AliDisplaySettings.this.getContentResolver(), "sys.mistaketouch.switch", value? 1:0);            }        }        return true;}

至于开关的变化要引起什么操作,只要判断sys.mistaketouch.switch的值从而进行处理即可。
应用程序间通过 ContentResolver来获取分享数据。

0 0
原创粉丝点击