以正确的方式更改首选项标题文本颜色

时间:2017-06-25 14:26:46

标签: android android-preferences

我想要一个偏好标题的文本,当另一个偏好(SwitchPreference)被更改时,将其颜色更改为白色。当另一个首选项被更改时,我从onPreferenceChange侦听器调用此方法:

private void enableSettingsGui(boolean enable)
{
    View preferenceView = getListView().getChildAt(myPref.getOrder());
    TextView title = (TextView)preferenceView.findViewById(android.R.id.title);
    title.setTextColor(getResources().getColor(R.color.white));
}

现在有两种情况:

1)如果我在onPreferenceChange方法中返回true,则SwitchPreference的切换正确更改(意味着向左或向右滑动以启用或禁用其新状态) ,但受影响的偏好标题的颜色不会改变。

2)如果我从onPreferenceChange返回false,则开关不会改变,但标题文字颜色会突然改变。

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

我已经找到了问题所在。

根据有关onPreferenceChange的文档,返回值为

  

“为真以使用新值更新首选项的状态。”

这意味着交换机发生了变化,因为返回值告诉他更新状态。颜色看起来好像没有设置,但实际上确实如此,只是为了改变状态,再次调用首选项的onCreate方法,从而覆盖颜色变化。

我所做的是覆盖setEnabled方法,如下所示:

@Override
public void setEnabled(boolean enabled)
{
    super.setEnabled(enabled);
    shouldEnable = enabled;
}

然后在onCreate添加了行setTitleTextColor(shouldEnable);,根据启用状态为文本着色。这样,在重新创建视图并保持颜色之后进行了更改。