我正在尝试为我的应用程序实现暗模式。我创建了两个不同的文件color.xml(第二个文件的颜色为暗模式)。我保存在布尔如果我的开关是开/关使用sharedpreferences,当我点击开关按钮颜色改变,但当我关闭我的应用程序重新打开它,返回“正常”的颜色。我处理碎片。
设置片段
public class SettingsFragment extends Fragment {
private Context mContext;
private SharedPreferences sharedPreferences;
private Spinner spinner;
private LottieAnimationView darkModeOn, darkModeOff;
private SwitchMaterial switchDarkMode;
private RadioButton lightRadio, darkRadio;
private RadioGroup radioGroup;
private boolean isDarkModeOn;
private boolean isDarkMap;
private Fragment fragment;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.settings_fragment, container, false);
mContext = getActivity().getApplicationContext();
fragment = getActivity().getSupportFragmentManager().findFragmentByTag(getResources().getString(R.string.settings_fragment_tag));
spinner = v.findViewById(R.id.radius_spinner);
darkModeOn = v.findViewById(R.id.animationDarkModeOn);
darkModeOff = v.findViewById(R.id.animationDarkModeOff);
radioGroup = v.findViewById(R.id.radio_group_settings);
lightRadio = v.findViewById(R.id.light_radio);
darkRadio = v.findViewById(R.id.dark_radio);
switchDarkMode = v.findViewById(R.id.switch_dark_mode);
//SharedPreferences per darkMode e darkMap
sharedPreferences = mContext.getSharedPreferences("settingsPref", Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = sharedPreferences.edit();
isDarkModeOn = sharedPreferences.getBoolean("darkMode",false);
//inizializza switch e animazione
if (!isDarkModeOn){
darkModeOn.setVisibility(View.VISIBLE);
switchDarkMode.setChecked(false);
}else {
darkModeOff.setVisibility(View.VISIBLE);
switchDarkMode.setChecked(true);
}
//switch dark mode on/off and save sharedPref
switchDarkMode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isDarkModeOn){
isDarkModeOn = true;
darkModeOff.setVisibility(View.GONE);
darkModeOn.setVisibility(View.VISIBLE);
darkModeOn.playAnimation();
darkModeOn.addAnimatorListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
darkModeOn.setVisibility(View.GONE);
darkModeOff.setVisibility(View.VISIBLE);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
editor.putBoolean("darkMode", true).apply();
MainActivity.darkModeOn = isDarkModeOn;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}else {
isDarkModeOn = false;
darkModeOn.setVisibility(View.GONE);
darkModeOff.setVisibility(View.VISIBLE);
darkModeOff.playAnimation();
darkModeOff.addAnimatorListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
darkModeOff.setVisibility(View.GONE);
darkModeOn.setVisibility(View.VISIBLE);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
editor.putBoolean("darkMode", false).apply();
MainActivity.darkModeOn = isDarkModeOn;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
}
});
return v;
}
}
colors.xml,夜间版本等于不同颜色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#56ab2f</color>
<color name="colorPrimaryDark">#56ab2f</color>
<color name="colorAccent">#56ab2f</color>
<!-- Color LightMode -->
<color name="colorChipSelected">#F44336</color>
<color name="ghost_white">#F8F8FF</color>
<color name="chipUnchecked">#56ab2f</color>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
<color name="defaultButtonBackgroud">#A6A6A6</color>
<color name="dafaultTextColor">#808080</color>
<color name="endColorGradient">#a8e063</color>
<color name="centerColorGradient">#7FCD1F</color>
<color name="textWhite">#FFFFFF</color>
<color name="primaryAndWhite">#56ab2f</color>
<color name="selectedAndWhite">#F44336</color>
<color name="primaryAndSelected">#56ab2f</color>
<color name="primaryAndEnd">#56ab2f</color>
<!-- Color DarkMode -->
<color name="backgroundStrong">#212121</color>
<color name="backgroundLight">#3d3d3d</color>
</resources>
mainactivity.java(oncreate)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
......
//SharedPreferences per Settings
settingsSharedPreferences = getSharedPreferences("settingsPref", MODE_PRIVATE);
darkModeOn = settingsSharedPreferences.getBoolean("darkMode", false);
......
}
在mainactivity中,我试着写这样的东西,但没有成功:
if (!darkModeOn){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
1条答案
按热度按时间p5fdfcr11#
可以在名为
extensions
:然后在你身上
res/values/styles.xml
像这样定义您的样式:在你的
colors.xml
文件:aaaaaa最后在每一个活动中都要这样设置主题: