Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在mvvm中更改颜色_Android_Mvvm - Fatal编程技术网

Android 在mvvm中更改颜色

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)

在我的应用程序中,我使用模式“mvvm”。在我的viewModel类中,我得到了一些float-In方法:

@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