另一种颜色是 Cardview 中的绑定颜色?

Another color is binding color in Cardview?

您好,我正在尝试在 CardView 上的 app:cardBackgroundColor 中设置红色,为此我有以下代码:

    <android.support.v7.widget.CardView
                    android:id="@+id/cvPassword"
                    style="@style/card_view.with_elevation.edit_text"
           app:cardBackgroundColor="@{registerViewModel.passwordCvColor}"
                    android:layout_marginTop="24dp"
                    app:layout_constraintBottom_toTopOf="@id/checkBox"
                    app:layout_constraintEnd_toEndOf="@id/guidelineRegisterEnd"
                    app:layout_constraintStart_toStartOf="@id/guidelineRegisterStart"
                    app:layout_constraintTop_toBottomOf="@id/cvRepeatEmail">

在 ViewModel 中,我有以下代码:

public final MutableLiveData<Integer> passwordCvColor = new MutableLiveData<>();

为了改变颜色,我有以下代码:

  binding.setPasswordHandler(new Handler(){
            @Override
            public void onFocusLost() {
                String password = registerViewModel.email.getValue();
                if(password == null || password.isEmpty()){
                    registerViewModel.passwordCvColor.setValue(R.color.red);
                }else{
                    registerViewModel.passwordCvColor.setValue(null);
                }
            }
        });

这个"work"因为观察者把值改成R.color.red视图里的颜色也变了,但是新的颜色是深蓝色而不是红色。

我正在尝试直接设置布局中的颜色,并且此方法有效且颜色为红色,但使用 ViewModel 则不行。

有什么想法吗?

谢谢

当您直接传递 registerViewModel.passwordCvColor.setValue(R.color.red); 中的 id 时,颜色将是对 R file 中颜色资源的引用,而不是颜色本身,例如 0x7f010000 和那几乎不会是你想要的颜色。

您应该改为使用此 ID 调用方法来获取资源。 在旧版本中,您可以使用 getResources().getColor() 但现在已弃用,您应该使用 ContextCompat.getColor().

代码将如下所示:

registerViewModel.passwordCvColor.setValue(ContextCompat.getColor(RegisterActivity.this, R.color.red));