在android.widget.TextView上找不到参数类型为android.graphics.drawable.Drawable的属性'android:drawable'的setter

时间:2017-03-13 08:10:13

标签: android android-databinding

我正在制作一个绑定适配器,我可以将彩色滤镜设置为可绘制的。

所以我在java类中有这些代码行

@BindingAdapter(value = {"drawable", "filterColor"}, requireAll= true)
public static void setColorFilterToDrawable(View view, int drawableInt, @ColorRes int color){
    Drawable drawable = ContextCompat.getDrawable(view.getContext(),drawableInt);
    drawable.setColorFilter(new
            PorterDuffColorFilter(ContextCompat.getColor(view.getContext(), color), PorterDuff.Mode.SRC_IN));
    view.setBackground(drawable);
}

在XML中,我像这样使用它

<TextView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:id="@+id/textCircle"
    android:drawable="@{@drawable/background_circle}"
    app:colorFilter="@{@color/primaryDark}"
    android:gravity="center"
    android:layout_alignParentRight="true"
    android:textColor="@android:color/white"
    android:textSize="14sp"
    android:text="X"
    android:textStyle="bold"
    android:layout_marginRight="5dp"
    android:onClick="@{viewModel::deletePhoto}" />

1 个答案:

答案 0 :(得分:2)

android:drawable不存在

TextView。从您的@BindingAdapter来看,您期望将值设置为app:drawable

此外@drawable@color展开为可绘制和颜色整数。因此,您的@BindingAdapter应该实现以下界面。

@BindingAdapter(value = {"drawable", "filterColor"}, requireAll= true)
public static void setColorFilterToDrawable(View view, Drawable drawable, @ColorInt int color){
    drawable.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
    view.setBackground(drawable);
}