我现在正在为我的应用程序创建首选项页面
在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并获取相应的对象来处理它。但它相当不方便,很难管理代码。有没有人有更聪明的方法?
发布于 2013-08-24 10:46:21
也许您可以将android:key属性设置为SwitchPreference和CheckBoxPreference xml,如下所示:
<?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
}
...
}希望这对你有用。
发布于 2015-04-11 21:32:51
在您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);
}
...
}发布于 2013-09-04 11:27:49
根据代码想要对首选项实例做什么,它可能像强制转换为Preference而不是特定的派生类型一样简单,例如:
enable = (Preference)findPreference(key_enable);这将允许类似这样的事情:
enable.setEnabled(true);并且消除了在代码中检查API级别的需要。
https://stackoverflow.com/questions/18414267
复制相似问题