更改特定首选项的背景

时间:2011-01-07 23:10:31

标签: android android-preferences

我有一个名为“Credentials”的偏好组,我想根据凭据是否有效来更改该标题的颜色。

我在启动PreferenceActivity时抓住它来保留对凭证项的引用

// ... code ...
public enum CredentialsInfo {
    VALID, INVALID, UNKNOWN
}

private Preference credentials;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.my_preferences);

    credentials = findPreference(getString(R.string.credentials));
    // ... etc ...
}

验证完我的凭据后,我运行了一个名为updateCredentialsBarColor的函数,该函数应该加载正确的drawable并将凭据Preference设置为适当的颜色。虽然当我尝试改变颜色时没有任何反应。我是否错误地获取了视图,如果是这样,获取它的正确方法是什么?

private void updateCreditialsBarColor(CredentialsInfo state) {
    Drawable background = null;
    switch(state) {
    case VALID:
        background = getResources().getDrawable(R.drawable.credentials_state_valid);
        break;
    case INVALID:
        background = getResources().getDrawable(R.drawable.credentials_state_invalid);
        break;
    case UNKNOWN:
    default:
        background = getResources().getDrawable(R.drawable.credentials_state_unknown);
        break;
    }
    if(background != null) {
        View credentialsView = credentials.getView(null, null);
        credentialsView.setBackgroundDrawable(background);
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,看起来不错。你确定updateCreditialsBarColor()被召唤了吗?毕竟,方法名称中有一个拼写错误,AFAICT。

您也可以在该方法中转储一些日志记录信息,并将其与在层次结构查看器中检查您的活动的结果进行比较,看看您是否获得了自己认为的View

您也可以考虑创建一个自定义子类,其中包含Preference,这封装了这种行为。