Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置暗模式_Java_Android_Android Fragments_Android Activity_Android Dark Theme - Fatal编程技术网

Java 如何设置暗模式

Java 如何设置暗模式,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

我是android开发新手,我希望在我的应用程序中设置暗模式。 为此,我创建了一个“preferences.xml”文件,该文件使用“SettingsActivity.java”文件和“SettingsFragment.java”文件显示。我在互联网上寻找了很多解决方案,但没有一个奏效。有人有教程、示例或解决方案吗? 谢谢

preferences.xml

<?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);
    }