首页 > 解决方案 > 以编程方式更改 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));

但是如何更改文本颜色?

标签: android

解决方案


更改文本颜色的方法是调用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)


推荐阅读