【问题标题】:SwitchPreferenceCompat looking different when added to XML vs created programmatically [duplicate]SwitchPreferenceCompat 添加到 XML 与以编程方式创建时看起来不同 [重复]
【发布时间】:2017-03-22 15:32:14
【问题描述】:

PreferenceFragment 中,我通过 XML 添加了 SwitchPreferenceCompat

<?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>

还有一个以编程方式添加:

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);

在屏幕上它们看起来不同(字体大小):

我尝试省略该行

switchPreference.setWidgetLayoutResource(android.support.v7.preference.R.layout.preference_widget_switch_compat);

但随后“切换”按钮变得不可见。

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

可以在on Github (branch_two) 找到测试项目。

【问题讨论】:

  • 你真的像上面那样把SwitchPreferenceCompat包裹在PreferenceCategory中吗?
  • PreferenceScreen也有它的compat兄弟,声明在xml而不是原来的PreferenceScreen
  • 当我使用Compat 25.2.0 时,它们看起来完全一样。
  • @GiovanniTerlingen 抱歉,忘记推送我的更改。如果您再次结帐 branch_two,您将看到不同之处。
  • 这是使用错误上下文创建新首选项的相同问题的重复。解决方案见this

标签: android android-support-library android-preferences android-preference-v14


【解决方案1】:

当您从 XML 扩展首选项时,它们会使用您在应用主题中指定的 preferenceTheme

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

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

new SwitchPreferenceCompat(getPreferenceManager().getContext());

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多