【问题标题】:Android icons and radio buttons not following day/night modeAndroid 图标和单选按钮不遵循日/夜模式
【发布时间】:2021-01-08 19:25:11
【问题描述】:

在创建了一个非常基本的设置 AppCompatActivity 和 PreferenceFragmentCompat 以更改我的应用程序的日/夜模式后,但浅色主题似乎不适用于整个应用程序。应用程序其余部分中的所有图标都不想跟随,ListPreference 对话框中的单选按钮似乎也保留了它们原来的深色主题。我在这里做错了什么?

SettingsActivity.java

public class SettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        getSupportFragmentManager().beginTransaction().replace(R.id.settingsFrame, new SettingsFragment()).commit();
    }

    public static class SettingsFragment extends PreferenceFragmentCompat {

        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.settings, rootKey);

            findPreference(getString(R.string.pref_theme)).setOnPreferenceChangeListener((preference, newValue) -> {
                if (newValue.toString().equals(getString(R.string.light))) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                } else if (newValue.toString().equals(getString(R.string.dark))) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                } else {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
                }
                return true;
            });
        }
    }
}

settings.xml

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

    <ListPreference
        android:key="@string/pref_theme"
        android:icon="@drawable/ic_day_24"
        android:title="@string/theme"
        app:useSimpleSummaryProvider="true"
        android:entries="@array/themes"
        android:entryValues="@array/themes"
        android:defaultValue="@string/system"/>
</PreferenceScreen>

ic_day_24.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24"
    android:tint="?attr/colorControlNormal">
  <path
        android:fillColor="@android:color/white"
        android:pathData="M20,8.69L20,4h-4.69L12,0.69 8.69,4L4,4v4.69L0.69,12 4,15.31L4,20h4.69L12,23.31 15.31,20L20,20v-4.69L23.31,12 20,8.69zM12,18c-3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6 6,2.69 6,6 -2.69,6 -6,6zM12,8c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4z"/>
</vector>

主题.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.FloatingTimer" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/red</item>
        <item name="colorPrimaryVariant">@color/blue_dark</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="colorSecondary">@color/orange_normal</item>
        <item name="colorSecondaryVariant">@color/orange_dark</item>
        <item name="colorOnSecondary">@color/white</item>
        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
        <item name="colorSurface">@color/blue_normal</item>
        <item name="colorOnSurface">@color/white</item>
        <item name="colorControlNormal">@color/white</item>
    </style>

    <style name="Theme.FloatingTimer.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
</resources>

theme.xml(夜晚)

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.FloatingTimer" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/red</item>
        <item name="colorPrimaryVariant">@color/blue_dark</item>
        <item name="colorOnPrimary">@color/white</item>
        <item name="colorSecondary">@color/orange_normal</item>
        <item name="colorSecondaryVariant">@color/orange_dark</item>
        <item name="colorOnSecondary">@color/white</item>
        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
        <item name="colorSurface">@color/blue_normal</item>
        <item name="colorOnSurface">@color/white</item>
        <item name="colorControlNormal">@color/white</item>
    </style>

    <style name="Theme.FloatingTimer.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
</resources>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="blue_light">#FF6E9FCF</color>
    <color name="blue_normal">#FF3F7FBF</color>
    <color name="blue_dark">#FF2F6090</color>
    <color name="orange_light">#FFD97F3F</color>
    <color name="orange_normal">#FFCC5500</color>
    <color name="orange_dark">#FF9A4000</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="translucent_black">#CC000000</color>
    <color name="translucent_dark_gray">#CC333333</color>
    <color name="translucent_light_gray">#CCCCCCCC</color>
    <color name="translucent_white">#CCFFFFFF</color>
    <color name="translucent_overlay">@color/translucent_white</color>
    <color name="list_icon">@color/black</color>
</resources>

colors.xml(夜晚)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="translucent_overlay">@color/translucent_dark_gray</color>3
    <color name="list_icon">@color/white</color>
</resources>

【问题讨论】:

  • 有夜间版本的colors.xml吗?
  • 已添加到帖子中。应该注意的是,我还尝试用@color/orange_normal 替换主题中的每一种颜色,以尝试强制可见性,但没有运气。
  • 看起来我在脚上开枪了,主题中的 colorControlNormal 正在影响它。如何应用暗模式和亮模式仍有许多令人困惑的方面,例如默认操作栏如何在暗模式下使用 colorSurface 和 colorOnSurface,但在亮模式下不使用。

标签: android androidx android-dark-theme android-darkmode


【解决方案1】:

我在我的主题中使用&lt;item name="colorControlNormal"&gt;@color/white&lt;/item&gt; 来扮演自己。删除后,图标颜色现在正确了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2022-08-10
    • 2022-11-10
    • 2022-01-12
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多