如何让暗色模式在我的应用上工作?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让暗色模式在我的应用上工作?相关的知识,希望对你有一定的参考价值。
我已经为用户的黑暗模式偏好设置了一个ListPreference,有不同的值。现在,我只想让应用程序与android Q中引入的新的黑暗模式实现一起工作。如果我设置系统黑暗模式,应用程序就会发生变化,因为我启用了 isforcedarkallowed
在 styles.xml
.
SettingsFragment.Arrays.xml(暗模式偏好的值)。
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
PreferenceScreen screen = getPreferenceScreen();
final ListPreference listPreference = (ListPreference) findPreference("theme");
Preference preference = (Preference) findPreference("notq");
int api = Integer.valueOf(android.os.Build.VERSION.SDK_INT);
if (api > 28) {
screen.removePreference(preference);
}
if (api < 29) {
screen.removePreference(listPreference);
}
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
listPreference.setValue(newValue.toString());
theme = String.valueOf(listPreference.getEntry());
Log.d("debug", theme);
if (theme.equals("Light")) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO);
}
if (theme.equals("Dark")) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
}
if (theme.equals("System default")) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
}
return true;
}
});
}
}
Arrays.xml(黑暗模式偏好的值)。
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Reply Preference -->
<string-array name="theme_entries">
<item>Light</item>
<item>Dark</item>
<item>System default</item>
</string-array>
<string-array name="theme_values">
<item>light</item>
<item>dark</item>
<item>default1</item>
</string-array>
</resources>
我的listpreference。
<ListPreference
android:id="@+id/list"
app:entries="@array/theme_entries"
app:entryValues="@array/theme_values"
app:key="theme"
app:title="@string/theme_title"
app:useSimpleSummaryProvider="true" />
还有我使用的应用主题(style.xml)。
<style name="AppTheme2" parent="Theme.AppCompat.DayNight.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:forceDarkAllowed" tools:targetApi="q">true</item>
<item name="android:isLightTheme" tools:targetApi="q">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">#FFFFFF</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
有什么建议吗?
答案
在你的 styles.xml
你不应该采取 Theme.AppCompat.DayNight.DarkActionBar
作为家长,同时您启用了 forceDarkAllowed
. 改成 Theme.AppCompat
或 Theme.MaterialComponents
. 你不能从一个白天的主题继承,而 forceDarkAllowed
设置为true。你可以在这里阅读 https:/developer.android.comguidetopicsuilook-feeldarktheme。 节 逼宫.
以上是关于如何让暗色模式在我的应用上工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 onSaveInstanceState 在我的片段上保存和恢复接口