gpt4 book ai didi

java - 当您关闭并再次打开应用程序时,如何使用RadioButton进行黑暗模式操作以及如何保持主题状态

转载 作者:行者123 更新时间:2023-12-01 16:13:56 24 4
gpt4 key购买 nike

也许我已经在这里有了答案,但是没有找到。

我在android studio中制作一个android应用程序,例如,我有两个活动。

主要活动(启动应用程序时的第一个活动)称为MainActivity。

第二个活动称为MainSettings(该活动是应用程序的主题设置)。

该图显示了活动“ MainSettings”

Image of the second MainSettings activity

在“ MainSettings”活动中,我有一个带有三个RadioButton的RadioGroup。

即使Android处于亮或暗模式,第一个RadioButton(始终亮)显然也应该总是亮的,因此仅在应用程序中它总是会亮的。

第二个RadioButton(始终为黑暗),即使android也处于亮或暗模式,该按钮显然也必须始终为黑暗,仅在应用程序中它始终为黑暗。

第三个RadioButton(跟随系统)显然应该始终选择android系统的颜色,并使整个应用程序具有android定义的颜色。

而且我想保留我在关闭并再次打开应用程序时选择的颜色状态。

该应用程序还将更改第一个“ MainActivity”活动的颜色,并在我关闭并重新打开它时也将其保留在那里。如果我还有其他活动,也应该发生。

我对此非常业余,已经警告过。

我已经准备好在colors.xml中的颜色和在styles.xml中的v的所有内容,并使用“ Theme.AppCompat.DayNight”

因此,即使在JAVA中,我也只希望命令的一部分,仅RadioButton的命令就可以完成我所说的一切。

第二个活动“ MainSettings”的xml代码

<RadioGroup
android:id="@+id/dark_mode_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="24dp”>

<RadioButton
android:id="@+id/always_light_radio_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Always Light" />

<RadioButton
android:id="@+id/always_dark_radio_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Always Dark" />

<RadioButton
android:id="@+id/follow_system_radio_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Follow System" />


第二个活动“ MainSettings”的Java代码

public class MainSettings extends AppCompatActivity {
SharedPreferences pref;
SharedPreferences.Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_settings);
pref = getSharedPreferences("MyPref", 0);
editor = pref.edit();

RadioGroup dark_mode_radio = findViewById(R.id.dark_mode_radio);


dark_mode_radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
int mode = 0;
switch (checkedId){
case R.id.always_light_radio_button:
mode = AppCompatDelegate.MODE_NIGHT_NO;
break;
case R.id.always_dark_radio_button:
mode = AppCompatDelegate.MODE_NIGHT_YES;
break;
case R.id.follow_system_radio_button:
mode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
break;

}
saveMode(mode);
changeNightMode(mode);
}
});


}



public void saveMode(int mode){
editor.putInt("mode", mode);
}

public void getMode(){
pref.getInt("key_name", AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);//default value is MODE_NIGHT_NO
}

private void changeNightMode(int nightMode) {
AppCompatDelegate.setDefaultNightMode(nightMode);
recreate();
}


}

最佳答案

将所选模式保存在SharedPreferences

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();


存储数据

public void saveMode(int mode){
editor.putInt("mode", mode);
}


检索数据

pubic void getMode(){
pref.getInt("key_name", AppCompatDelegate.MODE_NIGHT_NO);//default value is MODE_NIGHT_NO
}


点击单选按钮后更改模式

private void changeNightMode(int nightMode) {
AppCompatDelegate.setDefaultNightMode(nightMode);
recreate();
}


在这种情况下, nightMode必须是
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
AppCompatDelegate.MODE_NIGHT_NO
AppCompatDelegate.MODE_NIGHT_YES

在主要设置中

dark_mode_radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
int mode;
switch (checkedId){
case R.id.always_light_radio_button:
mode = AppCompatDelegate.MODE_NIGHT_NO;
break;
case R.id.always_dark_radio_button:
mode = AppCompatDelegate.MODE_NIGHT_YES;
break;
case R.id.follow_system_radio_button:
mode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
break;
}
saveMode(mode);
changeNightMode(mode);
}
});


更改为此:

public class MainSettings extends AppCompatActivity {

SharedPreferences pref;
Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
pref = getSharedPreferences("MyPref", 0);
editor = pref.edit();

//the rest of your code snippet
}

关于java - 当您关闭并再次打开应用程序时,如何使用RadioButton进行黑暗模式操作以及如何保持主题状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62452488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com