Android 在mvvm中更改颜色
在我的应用程序中,我使用模式“mvvm”。在我的viewModel类中,我得到了一些float-In方法:Android 在mvvm中更改颜色,android,mvvm,Android,Mvvm,在我的应用程序中,我使用模式“mvvm”。在我的viewModel类中,我得到了一些float-In方法: @Bindable public String getOneHourPercentChange(){ float percent = mCurrency.getQuotes().get(mRate.name()).getPercentChange1h(); String result; if(percent>0)
@Bindable
public String getOneHourPercentChange(){
float percent = mCurrency.getQuotes().get(mRate.name()).getPercentChange1h();
String result;
if(percent>0)
result = "+" + percent;
else
result = "" + percent;
return result;
}
如何根据变量“百分比”的值更改文本颜色?如果百分比小于零,则为红色,否则为绿色
以下是我使用百分比的xml代码:
<TextView
android:id="@+id/one_hours_value"
android:layout_width="40dp"
android:layout_height="19dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="16dp"
android:text="@{viewModel.oneHourPercentChange}"
app:layout_constraintEnd_toStartOf="@+id/one_hours_label"
app:layout_constraintTop_toTopOf="parent" />
我将创建一个单独的
BindingAdapter
@BindingAdapter("myColorAttr")
public static void bindColorAttr(View view, float value) {
if(valeue >= 0) view.setBackgroundColor(...green...);
else view.setBackgroundColor(...red...);
}
因此,在viewModel中会有float值,xml会这样引用它:
app:myColorAttr="@{viewModel.someFloatValue}"
在ViewModel中创建
MutableLiveData
percent
,然后使用简单的if station设置颜色订阅活动(或片段)中的更改。
鉴于:
在ViewModel中:
private MutableLiveData<Float> percent = new MutableLiveData<>();
...
private void setPercent(Float percent){
this.percent.setValue(percent);
}
public MutableLiveData<Float> getPercent(){
return percent;
}
//here some method setting percent or maybe in construcor
private MutableLiveData percent=new MutableLiveData();
...
私有无效设置百分比(浮动百分比){
此.percent.setValue(百分比);
}
公共可变LiveData getPercent(){
收益率;
}
//这里有一些设置百分比的方法,也可能是在construcor中
显示要更改颜色的xml代码。对不起,我的问题不准确。我需要更改文本颜色。但是我尝试了这段代码,你只需要改变适配器的主体来改变文本的颜色,你也可以把视图改成文本视图,也许我做错了什么,但是我为bind创建了一个方法。他返回浮动。在xml中,这不起作用。带有属性app的行:textColor未以白色突出显示(看起来像字符串)在编译期间或应用程序启动时是否出现任何错误?你们把浮点值放入ObservableField包装器了吗?对我来说很有用。只是忘了让方法保持静态。谢谢,这很有趣
private MutableLiveData<Float> percent = new MutableLiveData<>();
...
private void setPercent(Float percent){
this.percent.setValue(percent);
}
public MutableLiveData<Float> getPercent(){
return percent;
}
//here some method setting percent or maybe in construcor