android-studio - [Android App]切换深色模式时屏幕闪烁
问题描述
我目前正在使用 Android Studio 创建自己的应用程序。在这个应用程序中,我想创建一个切换到暗模式并返回的开关。
在 MainActivity.java 我使用以下代码
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
public class MainActivity extends AppCompatActivity {
private Button button;
private Switch aSwitch;
public static final String MyPREFERENCES = "nightModePrefs";
public static final String KEY_ISNIGHTMODE = "isNightMode";
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button feed = findViewById(R.id.feed);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
aSwitch = findViewById(R.id.day_night);
checkNightModeActivated();
aSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
if (isChecked) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
saveNightModeState(true);
recreate();
}else{
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
saveNightModeState(true);
recreate();
}
});
feed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Newsfeed.class));
}
});
}
private void saveNightModeState(boolean nightMode) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(KEY_ISNIGHTMODE, nightMode);
editor.apply();
}
private void checkNightModeActivated() {
if(sharedpreferences.getBoolean(KEY_ISNIGHTMODE, false)) {
aSwitch.setChecked(true);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}else{
aSwitch.setChecked(false);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
}
}
问题是,当我启动应用程序时,开关会将模式更改为暗模式。但随后,应用程序开始闪烁并且不再响应。
谁能告诉我,我做错了什么?
亲切的问候
凯
解决方案
我找到了解决我的问题的方法。
private Switch day_night;
day_night=findViewById(R.id.day_night);
day_night.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
else {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
}
});
推荐阅读
- mysql - SQL select s subtr value 和 real value
- java - 从抛出 OutOfMemoryError Apache POI 的 INPUT-STREAM 加载大型 xlsx 文件
- java - 默认构造函数如何初始化字段
- mysql - SQL 查询中的问题(预期输出未出现)
- json - 如何将此 json 展平为 tsv?
- python - Python正则表达式查找给定字符串中存在的模式
- scala - 如何在空的 Spark DataFrame 中添加特殊情况行?
- excel - 试图用字母后跟数字分隔单元格
- php - phpdoc:PHP 警告:count():参数必须是数组或实现 Countable 的对象
- javascript - 将 javascript 的变量传递给 php 到当前页面