SwitchPreferenceCompat在添加到XML时以不同的方式在编程时创建

asc*_*sco 7 android android-preferences android-support-library android-preference-v14

在a中PreferenceFragment,我SwitchPreferenceCompat添加了一个通过XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="cat 1">

        <SwitchPreferenceCompat
            android:key="pref_1"
            android:defaultValue="false"
            android:title="from xml"/>

    </PreferenceCategory>

    <PreferenceCategory
        android:key="pref_cat_1"
        android:title="cat 2"/>

</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

和一个以编程方式添加:

PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("pref_cat_1");

SwitchPreferenceCompat switchPreference = new SwitchPreferenceCompat(getActivity());
switchPreference.setWidgetLayoutResource(android.support.v7.preference.R.layout.preference_widget_switch_compat);
switchPreference.setTitle("programmatically");
switchPreference.setChecked(true);
switchPreference.setDefaultValue(true);

switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(final Preference preference, final Object newValue) {

        Toast.makeText(getActivity(), newValue.toString(), Toast.LENGTH_SHORT).show();

        return true;
    }
});

preferenceGroup.addPreference(switchPreference);
Run Code Online (Sandbox Code Playgroud)

在屏幕上,它们看起来不同(fontsize):

在此输入图像描述

我试着省略了这条线

switchPreference.setWidgetLayoutResource(android.support.v7.preference.R.layout.preference_widget_switch_compat);
Run Code Online (Sandbox Code Playgroud)

但是切换按钮变得不可见.

我怎样才能让它们看起来一样?

测试项目可以在Github上找到(branch_two).

Eug*_*nec 3

当您从 XML 扩充首选项时,它们会使用preferenceTheme您在应用程序主题中指定的内容。

当您以编程方式创建首选项时,您使用了普通的活动主题。

如果您使用正确的主题上下文,它将按预期工作:

new SwitchPreferenceCompat(getPreferenceManager().getContext());
Run Code Online (Sandbox Code Playgroud)