1

非常に基本的な設定 AppCompatActivity と PreferenceFragmentCompat を作成してアプリケーションの昼/夜モードを変更した後、ライト テーマがアプリケーション全体に適用されないようです。アプリケーションの残りのアイコンはどれも従う必要がなく、ListPreference ダイアログのラジオ ボタンも元の暗いテーマを保持しているようです。ここで何が間違っていますか?

システム/ダーク

光

設定Activity.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>

themes.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>

色.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>
4

1 に答える 1