android - 以编程方式更改 PreferenceActivity 中的所有视图文本颜色
问题描述
当 SwitchPreference 状态发生变化时,我想更改 PreferenceActivity 所有视图的文本颜色。
首选项.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:summary="Settings"
android:title="Settings" >
<SwitchPreference
android:key="NightMode"
android:summary="dark and light"
android:title="Night Mode" />
...
</PreferenceCategory>
</PreferenceScreen>
PrefsActivity.java
public class PrefsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
boolean nightMode = sharedPreferences.getBoolean("NightMode", false);
if(nightMode){
//I want to change text color here
}
} }
我可以通过这种方式更改布局的背景颜色:
getListView().setBackgroundColor(ContextCompat.getColor(this , R.color.colorBackground));
但是如何更改文本颜色?
解决方案
更改文本颜色的方法是调用textviewinstance.setTextColor(color)
. 不过,您需要独立地对每个视图执行此操作。
最好的方法是使用 android 主题系统。如果您在调用之前设置了主题setContentView
,则所有这些视图都将使用该主题创建。使用夜间模式所需的文本颜色制作主题。When nightmode is selected, call recreate() to kill your activity and start a new one, just like what happens on configuration changes. 然后在新实例的 onCreate 中,检查夜间模式是否打开并选择您的主题,然后通过调用设置内容视图setTheme(theme)
。
推荐阅读
- java - 如何创建一个通用的 FlatFileItemReader 来读取具有不同标题的 CSV 文件?
- python-3.x - 了解使用 python 3.8 和请求进行 Web 抓取的承载授权
- mysql - 如何选择具有最大值的行,同时排除最新添加的行
- c# - 将离散的非 UTC 日期/时间部分转换为 UTC DateTimeOffset
- windows - OpenProcess 第二个参数
- python - 返回到函数python时未识别名称
- sql - Sql请求将书表加入到许多作者到许多标签到许多类别
- javascript - 你如何让 this.form.submit() 作为 Ajax.BeginForm() 表单的 GET 提交
- xamarin - Xamarin.mac WKWebView 留下 2 个孤立进程
- javascript - 将语音对象而不是字符串传递给语音合成