我现在正在为我的应用
创建首选项页面在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
并获取相应的对象来处理它。
但是管理代码非常不方便。
有人有更聪明的方法吗?
答案 0 :(得分:14)
也许你可以为你的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
}
...
}
希望这适合你。
答案 1 :(得分:6)
在您的Java代码中使用TwoStatePreference
,它是CheckBoxPreference
和SwitchPreference
的父类。它具有您在用例中可能需要的所有方法。
这就是您提供的代码示例:
public class SettingActivity extends PreferenceActivity {
private TwoStatePreference enable;
@Override
protected void onCreate(Bundle savedInstanceState) {
addPreferencesFromResource(R.xml.setting);
enable = (TwoStatePreference) findPreference(key_enable);
}
...
}
答案 2 :(得分:1)
根据代码对首选项实例的要求,它可能就像转换为Preference
而不是特定的派生类型一样简单,例如:
enable = (Preference)findPreference(key_enable);
然后允许类似:
enable.setEnabled(true);
并且无需在代码中检查API级别。