【问题标题】:Android 5.0 - checkboxes in preferences are not visibleAndroid 5.0 - 首选项中的复选框不可见
【发布时间】:2016-10-25 19:47:37
【问题描述】:

我正在将我的应用升级到基于 AppCompat v21 的 Android 5.0 Lollipop 设计。

一切正常,但我在首选项屏幕上遇到了问题,其中复选框不可见。它们在屏幕上,当整个部分被触摸时突出显示时,我可以看到它们。功能正常,偏好更新成功。

应用程序中的其他任何地方都显示复选框,没有任何问题。

此外,它在 Android 2.3 上也能正常运行。

第二个和第三个设置中缺少复选框:

触摸行时可见复选框:

首选项及其代码非常基本,没有添加任何自定义内容。

我的带有首选项的 xml 文件如下所示(仅复制了复选框):

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

    <CheckBoxPreference
        android:key="show_romaji"
        android:title="@string/preferences_romaji_title"
        android:summary="@string/preferences_romaji_explanation"
        android:defaultValue="true"
        android:persistent="true" />

    <CheckBoxPreference
        android:key="send_statistics"
        android:title="@string/preferences_statistics_title"
        android:summary="@string/preferences_statistics_explanation"
        android:defaultValue="true"
        android:persistent="true" />

</PreferenceScreen>

偏好活动:

public class PreferenceActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SharedPreferenceFragment())
                .commit();
    }

}

偏好片段:

public class SharedPreferenceFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferences);
    }

}

我正在使用一个几乎没有定义的主题:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.JlptVocabulary" parent="Theme.AppCompat">

        <!-- Set AppCompat’s color theming attrs -->
        <item name="colorPrimary">#ffe91e63</item>
        <item name="colorPrimaryDark">@color/black</item>

        <!-- The rest of your attributes -->
        <item name="android:windowBackground">@color/backgroundBlack</item>
    </style>
</resources>

我被这个问题困住了,在进行了一些研究和实验后,我还没有找到解决方案。有人知道吗?

【问题讨论】:

标签: android checkbox android-5.0-lollipop preferenceactivity


【解决方案1】:

Theme.AppCompat 样式首选项中的复选框是黑色的(框的轮廓和填充,除了复选标记)。复选标记采用首选项背景颜色。在您的情况下,您正在设置黑色背景,因此复选框不会显示,因为它们现在都是黑色的。我建议使用单独的样式(例如:Theme.Pref_JlptVocabulary)作为具有正常灰色背景的首选项,以便出现复选框。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Theme.Pref_JlptVocabulary" parent="Theme.AppCompat">

    </style>
</resources>

另一种方法是通过重新定义复选框视图how-to-customize-the-color-of-the-checkmark-color-in-android... 的样式来自定义复选框背景和复选标记颜色。

【讨论】:

  • 是的,就是这样!谢谢。
【解决方案2】:

您也可以尝试使用其中一种 ThemeOverlays

<style name="SettingsTheme" parent="ThemeOverlay.AppCompat.Dark">
    <item name="android:windowBackground">@color/backgroundBlack</item>
</style>

我发现这在黑色背景上给出了合适的复选框。但是,在 Lollipop 设备(values-v21)上,我仍然使用扩展 Theme.Appcompat 的常规主题,因为 ThemeOverlay 似乎覆盖了我在 Lollipop 手机上的“colorAccent”值

【讨论】:

    【解决方案3】:

    我为这个问题找到了另一个解决方案。

    这可能是因为如果我们在 style.xml 文件中将 colorControlNormal 设置为与 MyMaterialTheme.Base 主题中的应用程序背景颜色相同。

    解决方案:更改 colorControlNormal 而非应用程序默认背景颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-27
      • 2012-10-27
      • 1970-01-01
      • 2015-12-07
      • 2011-06-30
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多