Java 我如何让我的主题以编程方式延续到其他活动中?
我在我的应用程序的设置页面中创建了一个功能,其中包含一个开关,按下该开关后,将切换到第二个“夜间”主题。大部分时间我都跟着。然而,我不知道如何将这个夜晚模式带入我的其他活动中?我试着在我的主要活动中调用“if switch checked”,但它显然没有看到那个开关。我主要需要知道的是,如何在另一个活动中检查开关状态?这是正确的做法吗?如果我在这个问题上遗漏了什么,请告诉我 //==========设置页面的代码==============//Java 我如何让我的主题以编程方式延续到其他活动中?,java,android,sharedpreferences,android-night-mode,Java,Android,Sharedpreferences,Android Night Mode,我在我的应用程序的设置页面中创建了一个功能,其中包含一个开关,按下该开关后,将切换到第二个“夜间”主题。大部分时间我都跟着。然而,我不知道如何将这个夜晚模式带入我的其他活动中?我试着在我的主要活动中调用“if switch checked”,但它显然没有看到那个开关。我主要需要知道的是,如何在另一个活动中检查开关状态?这是正确的做法吗?如果我在这个问题上遗漏了什么,请告诉我 //==========设置页面的代码==============// protected void onCreate(B
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
// ======== Night Mode ======== //
SwitchCompat switchCompat;
final SharedPref sharedPref;
sharedPref = new SharedPref(this);
if (sharedPref.loadNightModeState()) {
setTheme(R.style.AppTheme_Night);
getSupportActionBar().setBackgroundDrawable(getDrawable(R.drawable.actionbar));
actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.BackgroundLight));
} else setTheme(R.style.AppTheme);
setContentView(R.layout.activity_settings);
switchCompat = (SwitchCompat) findViewById(R.id.night_switch);
if (sharedPref.loadNightModeState()) {
switchCompat.setChecked(true);
}
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sharedPref.setNightModeState(true);
restartApp();
} else {
sharedPref.setNightModeState(false);
restartApp();
}
}
});
}
private void restartApp() {
Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
startActivity(intent);
finish();
}
public class SharedPref {
private SharedPreferences sharedPreferences;
public SharedPref(Context context) {
sharedPreferences = context.getSharedPreferences("filename", Context.MODE_PRIVATE);
}
public void setNightModeState(Boolean state) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("NightMode",state);
editor.apply();
}
public Boolean loadNightModeState (){
Boolean state = sharedPreferences.getBoolean("NightMode", false);
return state;
}
//==========SharedPref代码===========//
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
// ======== Night Mode ======== //
SwitchCompat switchCompat;
final SharedPref sharedPref;
sharedPref = new SharedPref(this);
if (sharedPref.loadNightModeState()) {
setTheme(R.style.AppTheme_Night);
getSupportActionBar().setBackgroundDrawable(getDrawable(R.drawable.actionbar));
actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.BackgroundLight));
} else setTheme(R.style.AppTheme);
setContentView(R.layout.activity_settings);
switchCompat = (SwitchCompat) findViewById(R.id.night_switch);
if (sharedPref.loadNightModeState()) {
switchCompat.setChecked(true);
}
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sharedPref.setNightModeState(true);
restartApp();
} else {
sharedPref.setNightModeState(false);
restartApp();
}
}
});
}
private void restartApp() {
Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
startActivity(intent);
finish();
}
public class SharedPref {
private SharedPreferences sharedPreferences;
public SharedPref(Context context) {
sharedPreferences = context.getSharedPreferences("filename", Context.MODE_PRIVATE);
}
public void setNightModeState(Boolean state) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("NightMode",state);
editor.apply();
}
public Boolean loadNightModeState (){
Boolean state = sharedPreferences.getBoolean("NightMode", false);
return state;
}
在您的应用程序类中,
onCreate
SharedPreferences sharedPreferences = getSharedPreferences("Your_Shared_pref", Context.MODE_PRIVATE);
boolean nightMode = sharedPreferences.getBoolean(SettingsActivity.DARK_THEME_PREFERENCE_KEY, false);
AppCompatDelegate.setDefaultNightMode(nightMode ? MODE_NIGHT_YES : MODE_NIGHT_NO);
在您的活动中,请执行以下操作:
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
AppCompatDelegate.setDefaultNightMode(isChecked ? MODE_NIGHT_YES : MODE_NIGHT_NO);
if (isChecked) {
sharedPref.setNightModeState(true);
recreate();
} else {
sharedPref.setNightModeState(false);
recreate();
}
}
});
@Override
public void recreate() {
finish();
overridePendingTransition(R.anim.anime_fade_in,
R.anim.anime_fade_out);
startActivity(getIntent());
overridePendingTransition(R.anim.anime_fade_in,
R.anim.anime_fade_out);
}
您可以在线找到动画xml。我将其放在onCreate和super.onCreate之间。我使用的代码取自我的设置java页面。事实证明,这很容易理解,我只是需要有人把它放在正确的角度
@Override
protected void onCreate(Bundle savedInstanceState) {
final SharedPref sharedPref;
sharedPref = new SharedPref(this);
if (sharedPref.loadNightModeState()) {
setTheme(R.style.AppTheme_Night);
//restartApp();
//getSupportActionBar().setBackgroundDrawable(getDrawable(R.drawable.actionbar));
//actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.BackgroundLight));
} else setTheme(R.style.AppTheme);
//restartApp();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
在“设置”活动中,您可以将开关状态保存到“共享引用”,在其他活动中,您可以从“共享引用”中读取开关状态,如中所示。@MarkusKauppinen该链接实际上非常有助于了解开关的工作原理,谢谢!但是我如何让它与布尔运算一起工作呢?我进一步检查了一些答案,但没有一个对我有用:(我是不是对此很愚蠢?我还添加了“SharedRef”文件。@MarkusKauppinen你能把这个作为一个答案,这样我就可以把它标记为正确的吗?它不起作用,但它为我把一切都放在了透视图上,正因为如此,我才把它弄明白!不幸的是,它不起作用,但仍然能让它起作用。我会在下面的答案中发布我所做的。我喜欢动画的想法,所以我会投你的票一旦我获得足够的声誉,就回答!