2015-07-05 43 views
6

Yeni Android Databinding Library sürümünü deniyorum ve ToolBar'ın arka plan rengini bir ciltleme kullanarak ayarlamak istedim. Varsayılan olarak, renk colorPrimary olmalıdır (temadan). olarak (Bunun için üçlü operatörü kullanıyorum -Tema özelliklerine sahip Veri Bağlama

Ben DataBinding kullanıyordum önce benim araç çubuğu hiçbir renk bağlı olmadığını colorPrimary arka planı ayarlamak istedi, bir bağlama ekledikten sonra

<android.support.v7.widget.Toolbar 
     android:id="@+id/mainToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     /> 

benziyordu kılavuzda belirtilen) - ama tema öznitelikleri de bir "?" operatör isimlerinden önce. Derleyici yeni bir üçlü işlem başlattığımı düşünüyor.

<data> 
    <variable name="toolBarBackgroundColor" type="int"/> 
</data> 
... 
<android.support.v7.widget.Toolbar 
     android:id="@+id/mainToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@{toolBarBackgroundColor!=0? toolBarBackgroundColor: ?attr/colorPrimary }" 
     /> 

Bağlantı özelliklerinde tema özelliklerine erişebilmemin bir yolu var mı? Teşekkürler!

Düzenleme

ben colorPrimary programlı bağlıyor ve java kodu ile bağlamak bulabileceğimi biliyorum. Ama sadece bunun için Xml tabanlı bir çözüm olup olmadığını merak ediyorum.

+3

Üzgünüm, henüz tema özelliklerine yönelik desteğimiz yok. Bir geçici çözüm olarak, bunu bir renk kaynağı değeri olarak tanımlayabilir ve üçlüsünde @ color/colorPrimary aracılığıyla kullanabilirsiniz. – yigit

+0

Oh Tamam. Kaynak değer geçici çözümünü deneyeceğim. Teşekkür –

+1

Çalıştı mı? '? android: attr/textColorPrimary ' – subhash

cevap

0

Veri bağlama kullanarak bir yol bulmak mı istiyorsunuz? İşte test ile yaptığım şey.

<data> 
    <variable name="toolBarBackgroundColor" type="int"/> 
</data> 
... 
<android.support.v7.widget.Toolbar 
     android:id="@+id/mainToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     app:customPrimaryBackground="@{toolBarBackgroundColor}" 
/> 
0

cevap biraz geç olmakla birlikte belki de birileri yardımcı olur: senin bağlama xml düzenini

@BindingAdapter({"app:customPrimaryBackground"}) 
public static void setCustomPrimaryBackground(View v, int resId) { 
    TypedValue typedValue = new TypedValue(); 
    Context context = v.getContext(); 
    if (resId == 0) { 
     context.getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true); 
     v.setBackgroundResource(typedValue.resourceId); 
    } else { 
     // Check the given resource ID is a color or drawable 
     context.getResources().getValue(resId, typedValue, true); 
     Drawable drawable; 
     if (typedValue.type >= TypedValue.TYPE_FIRST_COLOR_INT && typedValue.type <= TypedValue.TYPE_LAST_COLOR_INT) { 
      // It's a color 
      drawable = new ColorDrawable(typedValue.data); 
     } else { 
      drawable = ContextCompat.getDrawable(context, resId); 
     } 

     v.setBackground(drawable); 
    } 
} 

İkincisi: Birincisi, özel bir bağlanma adaptörü yöntemi oluşturun. tema erişen için

veri bağlama niteliklerini, bu kullanabilirsiniz:

(clickableBoolean değişken olduğunu hayal)

android:background="@{clickable ? android.R.attr.selectableItemBackground : android.R.color.transparent}" 

ek bağlama adaptörleri veya gerektikçe başka şeyler.

İlgili konular