数据绑定设置颜色

问题描述 投票:0回答:2

我尝试使用三元运算符来更改按钮的文本颜色。 类似的东西:这是 xml.

<Button
    android:id="@+id/actionButton"
    android:layout_width="113dp"
    android:layout_height="30dp"
    android:background="@drawable/button"
    android:backgroundTint="@{selected ? R.color.white : R.color.turquoise}"
    android:text="@{selected ? &quot;Selected &quot; : &quot;Select &quot;}"
    android:textColor="@{selected ? @color/white : @color/turquoise}"
    android:onClick="@{(view) -> handler.selectClick(view)}"/>

但是颜色设置不正确。相反,我得到了一些奇怪的紫色。

我试过了

<import type="com.myapp.R" />
android:textColor="@{selected ? R.color.white : R.color.turquoise}"

同样的结果。
我该怎么办?

android data-binding
2个回答
4
投票

您的第一个变体应该可以正常工作。您可以参考本文档的“资源”一章。 这是一个完整的工作示例。

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <color name="foo">#fff</color>
    <color name="bar">#000</color>
</resources>

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable name="selected" type="boolean" />
        <variable name="button2" type="String" />
    </data>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btn_a"
            android:onClick="switchColor"
            android:text="Click me"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btn_b"
            android:textColor="@{selected ? @color/foo : @color/bar}"
            android:text="@{button2}"/>

    </LinearLayout>
</layout>

ActivityMain.class

public class ActivityMain extends AppCompatActivity {

    public static final String TAG = "MainActivity";

    MainActivityBinding mBinding;
    boolean mSelected;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this, R.layout.main_activity);
        mBinding.setButton2("Don't click me please!");
    }

    public void switchColor(View view) {
        mBinding.setSelected(mSelected = !mSelected);
    }
}

0
投票

嗨,也许我来不及了,但这是另一种设置颜色的方法:

<com.google.android.material.card.MaterialCardView
    android:id="@+id/mcvProductItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="@{insuranceProduct.active()}"
    android:focusable="@{insuranceProduct.active()}"
    app:cardBackgroundColor="@{insuranceProduct.active() ? context.getColor(R.color.white) : context.getColor(R.color.bg_grey)}"
    android:onClick="@{(view) -> productItemClickListener.selectProduct(view,insuranceProduct)}"
    app:cardCornerRadius="@dimen/_5dp"
    app:cardUseCompatPadding="true">
 </com.google.android.material.card.MaterialCardView>

基本上我使用上下文来获取颜色资源。希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.