java - 代码中的 SwitchPreference 和 CheckBoxPreference

标签 java android xml android-preferences

我现在正在为我的应用创建一个偏好页面

在 API-14 之后,switchpreference 可用。我想用它来替换 API14+ 设备上的复选框首选项

很容易使用res/xmlres/xml-14获取正确的xml资源

但是在编码部分,根据API切换preference并不是那么方便。

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-clause来检查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
    }
    ...
}

希望这对你有用。

关于java - 代码中的 SwitchPreference 和 CheckBoxPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414267/

相关文章:

Android Tesseract 和 Leptonica OCR。读取单个框和字符

android - 自签名证书在发布到 chromecast 时是否有效?

asp.net - 如何在网站中添加丰富网页摘要?

Java:解析 RSS 提要时出错

java - 使用Postman测试Spring中的保存方法

android - Action Bar Items (Action Items) 未在 android 中显示。

java - 如何修改xml文档并将其作为java中的字符串返回?

java - 使用环境变量在项目外加载 log4j2.xml 文件

java - 嵌套异常是 java.lang.NoClassDefFoundError : org/hibernate/boot/registry/classloading/internal/ClassLoaderServiceImpl$Work

java - 给予按钮鼠标单击焦点