我已使用偏好屏幕将暗模式应用为:
> dt
foo bar val stuff things
1: a K 100 a_stuff things_a
2: b L 101 b_stuff things_b
3: c M 102 c_stuff things_c
4: d N 103 d_stuff things_d
5: e O 104 e_stuff things_e
6: f P 105 f_stuff things_f
7: g Q 106 g_stuff things_g
8: h R 107 h_stuff things_h
9: i S 108 i_stuff things_i
10: j T 109 j_stuff things_j
和数组定义为
<ListPreference
app:defaultValue="default"
app:entries="@array/themes_labels"
app:entryValues="@array/themes_color"
app:key="theme"
app:title="@string/Theme"
app:useSimpleSummaryProvider="true"/>
</PreferenceCategory>
现在,在<resources>
<array name="themes_labels">
<item>"Default"</item>
<item>"Light"</item>
<item>"Dark"</item>
</array>
<string-array name="themes_color">
<item>"Default"</item>
<item>"Light"</item>
<item>"Dark"</item>
</string-array>
</resources>
的onCreate中,我要将主题更改为:
MainActivity
现在,问题是使用 @Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
}
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
// AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
String theme = sharedPref.getString("theme", "Default");
// Toast.makeText(this, theme, Toast.LENGTH_LONG).show();
if (theme.equals("Dark")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
} else if (theme.equals("Light")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
}
}
或Default(即使Light
为default
,就像打开了省电功能一样),一切都很好。但是,如果选择了黑暗模式,那么我将面临许多问题,例如未应用在片段中,甚至在某些情况下会导致崩溃。
我对android很陌生,不明白为什么会这样。请帮助。
要求尝试解决此问题的here