我的android设置活动中有一个复选框。我想通过preferenceCheckBox值的更改来更改应用程序所有活动的背景色。
我的代码:
SettingsFragment.java
public class SettingsFragment extends PreferenceFragmentCompat {
private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preference);
preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if( key.equals("pref_light")){
Preference p = findPreference(key);
//i don't know how to change the background with the provided change !
}
}
};
}
我的问题 我想学习如何通过听过的偏好更改来更改所有活动的背景。假设我只有一项主要活动和一项设定活动。
答案 0 :(得分:0)
请注意,默认情况下,PreferenceFragmentCompat
将值保存在名为SharedPreferences
的对象中,该对象可在应用程序中的任何位置访问。此处的详细信息:https://developer.android.com/guide/topics/ui/settings
因此,您可以在应用程序中的任何位置执行此操作:
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this);
boolean isChecked = sharedPreferences.getBoolean(“pref_light”, "");
答案 1 :(得分:0)
您无法从一个片段访问应用程序中的所有视图。但是,您可以在活动中覆盖onResume()方法。在其中,您可以检查首选项并设置所需的背景。
@Override
protected void onResume() {
super.onResume();
SharedPreferences pref = getSharedPreferences("MyPref", Context.MODE_PRIVATE);
Boolean backgroundFlag = pref.getBoolean("pref_light", true);
View rootView = findViewById(R.id.your_view_id);
if (backgroundFlag) {
rootView.setBackground(someColor);
} else {
rootView.setBackground(someOtherColor);
}
}
答案 2 :(得分:0)
从类似的片段中保存您的偏好,
SharedPreferences prefs = getSharedPreferences("Pref", Context.MODE_PRIVATE);
prefs.edit().putBoolean("pref_light",true).apply();
下一个代码用于对所有活动应用背景色的更改。 您可以创建一个BaseActivity,并且可以为BaseActivity创建onResume来更改所有活动的背景。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
SharedPreferences pref = getSharedPreferences("Pref", Context.MODE_PRIVATE);
Boolean isChecked = pref.getBoolean("pref_light", true);
View rootView = getWindow().getDecorView().getRootView();
if (isChecked) {
rootView.setBackground(bgColor);
} else {
rootView.setBackground(bgOtherColor);
}
}
}
然后不要这样做
public class MainActivity extends AppCompatActivity {
}
喜欢
public class MainActivity extends BaseActivity {
}
对于所有活动