2012-02-22 22 views
39

İşaret özniteliğini kod aracılığıyla bir öznitelikten alıyorum.Kod referansı nasıl alınır?

android:background="?attr/listItemBackground" 

nitelik referans benim Tema tarafından ayarlanır: Benim xml düzenleri ben kolayca böyle başvurulan çekilebilir alabilirsiniz. Başvurulan kodun kodlanabilir olması mümkün mü diye bakmaya çalışıyorum.

Özel bir görünüm içinde stil attr ve değeri okuyarak bu konuda çalışabilirim, ancak bu durumda bunun mümkün olup olmadığını anlamak istiyorum. Bunun mümkün olacağını düşünürdüm ama bu özellik referansını elde etmenin yollarını bulamadım.

Teşekkürler!

cevap

99

Bu nasıl edilir bu:

// Create an array of the attributes we want to resolve 
// using values from a theme 
int[] attrs = new int[] { R.attr.listItemBackground /* index 0 */}; 

// Obtain the styled attributes. 'themedContext' is a context with a 
// theme, typically the current Activity (i.e. 'this') 
TypedArray ta = themedContext.obtainStyledAttributes(attrs); 

// To get the value of the 'listItemBackground' attribute that was 
// set in the theme used in 'themedContext'. The parameter is the index 
// of the attribute in the 'attrs' array. The returned Drawable 
// is what you are after 
Drawable drawableFromTheme = ta.getDrawable(0 /* index */); 

// Finally, free the resources used by TypedArray 
ta.recycle(); 
+1

Cevabınız için teşekkür ederiz. Bunu yapmanın tek yolu bu gibi görünüyor. – Jona

+0

Denedim ama indeksi 0 kullanarak değil, 1 yerine ('getIndex (0)' ile döndürülmüş olan budur. –

+0

Derlemem için R.attr.listItemBackground ile R.attr.selectableItemBackground değiştirdim – dimsuz

0

kullandığınız gerekmiyor:

android:background="@drawable/listItemBackground"

Ve sonra:

myImageButton.getBackgroundDrawable()

Veya belki de anlamadı ...

+0

İyi bir fikir, başvurulan kaynağa, theme.xml aracılığıyla uygun referans kümesine sahip olan attr/listItemBackground'dan erişmek istediğimdir. Bir görünümden zaten ayarlanmış bir arka plan almak sorun değil :) – Jona

+0

Tamam anladım! Context.getResources() dosyasından doğrudan "? Attr/listItemBackground" almaya çalışmanın mümkün olduğunu düşünüyorum. Ama aynı zamanda çekilebilirliğe atıfta bulunmaktan daha iyi çözümler olduğunu düşünüyorum. Ana fikir hakkında konuşabilir miyiz? (ya da bu çözümün en iyisi olduğunu düşünmüyorsanız) –

+0

Eh, uygulamanız için karmaşık ancak henüz düzenlenmiş temalarım var. Ama bu bir durumun mümkün olup olmadığını ve nasıl kullanılacağını görmek istedim. Res.getDrawable (R.attr.listItemBackground) Kaynak'ın halihazırdaki ayarlanmış Tema ile uygun şekilde ayarlandığından ve doğru Kaynağa işaret ettiğinden bunu yaparsınız. Ama göründüğünden biraz daha karmaşık ... – Jona

İlgili konular