Estoy desarrollando una aplicación que utilizo en DarkMode tema que pongo una Switch
de encendido y apagado darkMode y lo guardo dentro de un boolian générale significa darkMode obtener verdaderas o falsas ( boolean isDarkMode =false;
)
que funciona bien y lo uso SharedPreferences
para guardar este valor verdadero o falso para usarlo en otro sin muchas actividades. que funcione, pero ... Al cerrar la aplicación y vuelva a ejecutar la aplicación del valor de SharedPreferences no se guarda y se remonta al primer valor de boolian (gracias u)
SettingActivity.java (para ajustar boolian verdadero o falso)
package com.kurdfoxx.nightmodewithsharedprefrense;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
public class SettingActivity extends AppCompatActivity {
Switch mySwitch;
boolean isDarkMode =false;
private static final String DARKMODE = "login";
@Override
protected void onCreate(Bundle savedInstanceState) {
myboolian();
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
setTheme(R.style.darkTheme);
isDarkMode =true;
} else {
setTheme(R.style.AppTheme);
isDarkMode =false;
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
Toast.makeText(this, ""+ isDarkMode, Toast.LENGTH_SHORT).show();
mySwitch = findViewById(R.id.switch1);
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
mySwitch.setChecked(true);
}
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
isDarkMode =true;
restartApp();
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
isDarkMode =false;
restartApp();
}
}
});
Button buttonGoMain=findViewById(R.id.btn_go_MainAct);
buttonGoMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SettingActivity.this,MainActivity.class));
}
});
}
public void restartApp() {
Intent intentRestartApp = new Intent(getApplicationContext(), SettingActivity.class);
startActivity(intentRestartApp);
finish();
}
public void myboolian(){
isDarkMode =!isDarkMode; //change isDarkMode from false to true by this
SharedPreferences sharedPreferences =getSharedPreferences(DARKMODE,MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("ISDARKMODE", isDarkMode);
editor.apply();
}
}
y MainActivity.java
package com.kurdfoxx.nightmodewithsharedprefrense;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String DARKMODE = "login";
boolean isDarkMode = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
getData();
if (isDarkMode){
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
setTheme(R.style.darkTheme);
isDarkMode =true;
} else {
setTheme(R.style.AppTheme);
isDarkMode =false;
}
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_go_to_setting_activity);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SettingActivity.class));
}
});
}
private void getData() {
SharedPreferences sharedPreferences = getSharedPreferences(DARKMODE, MODE_PRIVATE);
isDarkMode = sharedPreferences.getBoolean("ISDARKMODE", false);
}
}
gracias a @Grisgram de ayuda que solowed este problam por algunos cambios y andrestanding Mure acerca
settingActivity.java
package com.kurdfoxx.nightmodewithsharedprefrense;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
public class SettingActivity extends AppCompatActivity {
public static Switch mySwitch;
boolean isDarkMode =false;
private static final String DARKMODE = "dark";
@Override
protected void onCreate(Bundle savedInstanceState) {
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
setTheme(R.style.darkTheme);
isDarkMode=true;
} else {
setTheme(R.style.AppTheme);
isDarkMode=false;
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
Toast.makeText(this, ""+ isDarkMode, Toast.LENGTH_SHORT).show();
mySwitch = findViewById(R.id.switch1);
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
mySwitch.setChecked(true);
}
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
isDarkMode=true;
myboolian();
restartApp();
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
isDarkMode=false;
myboolian();
restartApp();
}
}
});
myboolian();
Button buttonGoMain=findViewById(R.id.btn_go_MainAct);
buttonGoMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SettingActivity.this,MainActivity.class));
}
});
}
public void restartApp() {
Intent intentRestartApp = new Intent(getApplicationContext(), SettingActivity.class);
startActivity(intentRestartApp);
finish();
}
public void myboolian(){
// isDarkMode =!isDarkMode; //change isDarkMode from false to true by this
SharedPreferences sharedPreferences =getSharedPreferences(DARKMODE,MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("ISDARKMODE", isDarkMode);
editor.apply();
}
}
y actividad principal
package com.kurdfoxx.nightmodewithsharedprefrense;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final String DARKMODE = "dark";
boolean isDarkMode ;
@Override
protected void onCreate(Bundle savedInstanceState) {
getData();
Toast.makeText(this, "is datk ?"+isDarkMode, Toast.LENGTH_SHORT).show();
if (isDarkMode){
setTheme(R.style.darkTheme);
}else {setTheme(R.style.AppTheme);}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_go_to_setting_activity);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SettingActivity.class));
}
});
}
private void getData() {
SharedPreferences sharedPreferences = getSharedPreferences(DARKMODE, MODE_PRIVATE);
isDarkMode = sharedPreferences.getBoolean("ISDARKMODE", false);
}
}