Android settings中SwitchPreference的简单处理

在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来获取分享数据。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值