我现在正在为我的应用创建首选项页面
在API-14之后,可以使用switchpreference.我想用它来取代API14设备上的checkBoxpreference
使用res / xml和res / xml-14很容易获得正确的xml资源
然而,在编码部分中,根据API切换偏好并不是那么方便.
- public class SettingActivity extends PreferenceActivity {
- private CheckBoxPreference enable;
- private SwitchPreference enablev14;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- addPreferencesFromResource(R.xml.setting);
- if (Build.VERSION.SDK_INT < 14)
- enable = (CheckBoxPreference) findPreference(key_enable);
- else
- enablev14 = (SwitchPreference) findPreference(key_enable);
- }
- ...
- }
现在我的方法是使用if子句检查Build.VERSION并获取相应的对象来处理它.
但是管理代码非常不方便.
有没有人有更聪明的方法呢?
解决方法
也许你可以为你的SwitchPreference和CheckBoxPreference xml设置一个android:key属性,就像这样:
- <?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
- <CheckBoxPreference
- android:key="pref_sync"
- android:title="@string/pref_sync"
- android:defaultValue="true" />
- </PreferenceScreen>
和
- <?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
- <SwitchPreference
- android:key="pref_sync"
- android:title="@string/pref_sync"
- android:defaultValue="true" />
- </PreferenceScreen>
然后你可以检查这个键是否在你的代码中返回true或false,如下所示:
- public class SettingActivity extends PreferenceActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- addPreferencesFromResource(R.xml.setting);
- PreferenceManager preferenceManager = getPreferenceManager();
- if (preferenceManager.getSharedPreferences().getBoolean("pref_sync",true)){
- // Your switch is on
- } else {
- // Your switch is off
- }
- ...
- }
希望这对你有用.