另一种颜色是 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));
您好,我正在尝试在 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));