20

bu özel görünüm MyView olması halinde alışın Bazı özel niteliklerini tanımlayançekilebilir başvuru için kaynak kimliği tarz nitelik

<com.example.test.MyView 
     android:id="@+id/view1" 
     android:text="@string/app_name" 
     . . . 
     app:backgroundBase="@drawable/logo1" 
     app:normalColor="@color/blue"/> 

İlk başta

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0); 
int base = a.getInteger(R.styleable.MyView_backgroundBase, R.drawable.blank); 
numaralı özel özniteliği alabileceğimi düşündüm

Yalnızca, özellik atandığında ve varsayılan R.drawable.blank döndüğünde çalışır. app:backgroundBase bir istisna atılır atandığında, özel özellik biçimi tamsayı olarak ilan etmesi olsa bile, gerçekten Drawable başvuran ve aşağıdaki gibi alınması gerekir çünkü
"türü tamsayı dönüştürmek = 0xn Can not":

Drawable base = a.getDrawable(R.styleable.MyView_backgroundBase); 
if(base == null) base = BitMapFactory.decodeResource(getResources(), R.drawable.blank); 

Ve bu çalışır.
Şimdi benim sorum:
Gerçekten TypedArray dan Drawable almak istemiyorum, ben (o R.drawable.logo1 olurdu yukarıdaki örnekte) tamsayı kimliği app:backgroundBase tekabül istiyorum. Onu nasıl alabilirim?

cevap

36

Cevabın doğru olduğunu çıkıyor:

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0); 
int base = a.getResourceId(R.styleable.MyView_backgroundBase, R.drawable.blank); 
+3

bana yardımcı olurdu bazı açıklama: 'R.drawable.blank' istenen Biri yoksa durumunda varsayılan kaynaktır – HaydenKai