2016-10-07 21 views
6
bağlayıcı

Ben Holder sınıfında yöntemKüme metin rengi Android

public int getTitleColor(Context context, Item item) { 
    ... 
} 

olursa olsun aşağıda gibi tanımlanır kütüphane

android:textColor="@{holder.getTitleColor(context, item)}" 

bağlama verileri kullanarak TextView metin rengini ayarlamak çalışıyorum renk int (@ColorInt) veya renk kaynağını (@ColorRes) döndürürsem, metni beyaza boyar. Neyi yanlış yapıyorum?

cevap

11

onu aramak için yöntemini oluşturmak belirleyici bir kaynak kimliği beklemeli.

her bağlanabilir görünüm için oluşturulmuş Context referans kullanmak ve described in the DataBinding Dev Guide olarak, işaret ediyor renge kaynak kimliği dönüştürmek için kullanılır:

bağlam adlı özel bir değişkeni bağlanmasında kullanılmak üzere oluşturulur

Gerektiğinde ifadeler. Bağlam değeri, Kök Görünüm'ün getContext() öğesinden gelen İçeriktir.

kullanımı bunu böyle rengini ayarlamak için:

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{data.text}" 
      android:textColor="@{context.getColor(data.colorRes)}" 
      /> 
+4

dönüş değeriyle bu çözümü API düzeyi düşük bir cihazda kullanmaya çalışırsanız 23'ten fazla "java.lang.NoSuchMethodError" u belirten bir hata alıyorsunuz. Önceki sürümler için bir çözüme ihtiyaç duyanlar için şunu kullanın: ** android: textColor = "@ {context.getResources(). GetColor (data.colorRes)}" ** – Fer

3

Ben int Sen bununla olduğu hissedilebilinir rağmen altılı renk olarak yorumlanır sağlıyoruz görünüyor BindingAdapter

@BindingAdapter({"bind:color"}) 
public static void setFont(TextView textView, Item item) { 
    textView.setTextColor(<set color of your choice>); 
} 

kullanarak ve xml

app:color="@{item}" 
+0

dair bir açıklamanız neden benim yöntem çalışmıyor? Android tarafından ihtiyaç duyulan int döndürür: textColor, sorudaki kodda neyin yanlış olduğu hakkında hiçbir fikrim yok. – tomrozb

+0

yönteminize bazı girişler koyun ve oraya gidip gitmediğini kontrol edin, çünkü veri bağlama ile bunun gibi bir yöntemi çağırmak ve aynı zamanda –