我有一个名为“凭据”的首选项组,我想根据凭据是否有效来更改标题的颜色。

启动我的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的函数,该函数应该加载正确的可绘制对象并将凭据首选项设置为适当的颜色。虽然当我尝试更改颜色时没有任何反应。我是否正确地获取了视图,如果是这样,获取视图的正确方法是什么?

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);
    }
}

最佳答案

嗯,看起来不错。您确定updateCreditialsBarColor()被呼叫了吗?毕竟,方法名称AFAICT中有一个错字。

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

您可能还考虑创建一个封装了此行为的Preference的自定义子类。

关于android - 更改特定偏好项的背景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4631115/

10-10 08:53
查看更多