您的位置:首页 > 移动开发 > Android开发

Android settings中SwitchPreference的简单处理

2016-01-23 12:07 483 查看
在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来获取分享数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: