我是 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>
arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pref_app_theme_entries">
<item>@string/system</item>
<item>@string/battery_saver</item>
<item>@string/light</item>
<item>@string/dark</item>
</string-array>
<string-array name="pref_app_theme_values">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
</resources>
activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_settings"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
tools:context=".SettingsActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/activity_settings_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp"
android:background="@color/colorPrimaryDark"
app:title="@string/settings"
app:titleTextColor="@color/colorAccent" />
<FrameLayout
android:id="@+id/activity_settings_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/activity_settings_toolbar" />
</RelativeLayout>
SettingsActivity.java
public class SettingsActivity extends AppCompatActivity {
private static Preference settings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
if (findViewById(R.id.activity_settings_fragment_container) !=null) {
if (savedInstanceState != null)
return;
getFragmentManager().beginTransaction().add(R.id.activity_settings_fragment_container, new SettingsFragment()).commit();
}
Toolbar toolbar = findViewById(R.id.activity_settings_toolbar);
toolbar.setTitleTextAppearance(this, R.style.KaushanScriptRegular);
toolbar.setNavigationIcon(R.drawable.ic_back);
toolbar.setNavigationOnClickListener(view -> {
Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.swipe_right_enter, R.anim.swipe_right_exit);
});
}
}
SettingsFragment.java
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}