Java 如何设置暗模式
我是android开发新手,我希望在我的应用程序中设置暗模式。 为此,我创建了一个“preferences.xml”文件,该文件使用“SettingsActivity.java”文件和“SettingsFragment.java”文件显示。我在互联网上寻找了很多解决方案,但没有一个奏效。有人有教程、示例或解决方案吗? 谢谢 preferences.xmlJava 如何设置暗模式,java,android,android-fragments,android-activity,android-dark-theme,Java,Android,Android Fragments,Android Activity,Android Dark Theme,我是android开发新手,我希望在我的应用程序中设置暗模式。 为此,我创建了一个“preferences.xml”文件,该文件使用“SettingsActivity.java”文件和“SettingsFragment.java”文件显示。我在互联网上寻找了很多解决方案,但没有一个奏效。有人有教程、示例或解决方案吗? 谢谢 preferences.xml <?xml version="1.0" encoding="utf-8"?> <Pr
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:key="@string/key_app_theme"
android:title="@string/app_theme"
android:summary=""
android:icon="@drawable/ic_app_theme"
android:entries="@array/pref_app_theme_entries"
android:entryValues="@array/pref_app_theme_values"
android:dialogTitle="@string/app_theme"
android:defaultValue="1"/>
</PreferenceScreen>
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
请参阅本视频,了解夜间模式: 它是在Kotlin中给出的,但是转换成Java非常简单。 要收听SharedReference,请执行以下操作:
int theme = Integer.valueOf(sharedPreferences.getString("theme", "1"));
switch (theme) {
case 3 :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
break;
case 4 :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
break;
case 2 :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
break;
default :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
(假设主题设置的首选项键为“theme”。)
代码的其余部分在XML文件中,因此当使用Java而不是Kotlin时,它是不变的
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.night_mode) {
// Get the night mode state of the app.
int nightMode = AppCompatDelegate.getDefaultNightMode();
//Set the theme mode for the restarted activity
if (nightMode == AppCompatDelegate.MODE_NIGHT_YES) {
AppCompatDelegate.setDefaultNightMode
(AppCompatDelegate.MODE_NIGHT_NO);
} else {
AppCompatDelegate.setDefaultNightMode
(AppCompatDelegate.MODE_NIGHT_YES);
}
// Recreate activity for the theme change to take effect.
recreate();
}
return super.onOptionsItemSelected(item);
}
此外,您还可以使用欢迎使用堆栈溢出。看一看,如果你被困在这里问一个问题。展示你所做的总是更好的。
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
int theme = Integer.valueOf(sharedPreferences.getString("theme", "1"));
switch (theme) {
case 3 :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
break;
case 4 :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
break;
case 2 :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
break;
default :
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.night_mode) {
// Get the night mode state of the app.
int nightMode = AppCompatDelegate.getDefaultNightMode();
//Set the theme mode for the restarted activity
if (nightMode == AppCompatDelegate.MODE_NIGHT_YES) {
AppCompatDelegate.setDefaultNightMode
(AppCompatDelegate.MODE_NIGHT_NO);
} else {
AppCompatDelegate.setDefaultNightMode
(AppCompatDelegate.MODE_NIGHT_YES);
}
// Recreate activity for the theme change to take effect.
recreate();
}
return super.onOptionsItemSelected(item);
}