2013-11-28 18 views
7

Benim düzenimin arka planı olarak bir 9patch seti var. Yine de hala selectableItemBackground referans numarasını kullanarak dokunma geri bildirimi sağlamak istiyorum.? Android: attr/selectableItemBackground başka bir varolan arka plan ile

işe yaramadı ancak ikinci <item> ait android:drawable gibi bir 9patch ile <layer-list> ve selectableItemBackground kullanarak denedim.

Ayrıca <layer-list> ile list_selector_background_pressed.xmlselectableItemBackground için degrade çekilebilir android kullanır bir seçici yapmak ve overlay deneyebilirsiniz. Ama 4.4 KitKat'ta seçilen arkaplan rengi gerçekte yerine jellybeans içinde mavi gri, bu yüzden gerçekten var sahiptir

daha kolay bir yol olarak, doğru adamlar D onu :(hardcode edemez:?

cevap

16

Ben 9patch ve android olarak selectableItemBackground ile kullanılarak denedim: ikinci durumda çekilebilir, ancak bu işe yaramadı

Evet, çekilebilir bir katman-listesindeki öznitelik (ya da devlet-listesi) yapar. attr değerini kabul etmiyorsunuz Resource.NotFoundException. LayerDrawable'ın (veya StateListDrawable's) kaynak koduna bir bakış, nedenini açıklar: sağladığınız değerin, çekilebilir bir kimlik olduğu varsayılır.

Ama kodunda bir özellik için bir tema ve platforma özel çekilebilir alabilirsiniz: Artık

// Attribute array 
int[] attrs = new int[] { android.R.attr.selectableItemBackground }; 

TypedArray a = getTheme().obtainStyledAttributes(attrs); 

// Drawable held by attribute 'selectableItemBackground' is at index '0'   
Drawable d = a.getDrawable(0); 

a.recycle(); 

, oluşturabileceğiniz bir LayerDrawable:

LayerDrawable ld = new LayerDrawable(new Drawable[] { 

         // Nine Path Drawable 
         getResources().getDrawable(R.drawable.Your_Nine_Path), 

         // Drawable from attribute 
         d }); 

// Set the background to 'ld' 
yourLayoutContainer.setBackground(ld); 

Ayrıca gerekir yourLayoutContainer's clickable özniteliği ayarlandı:

+0

Bu ilginç görünüyor. Deneyecek. –

+0

@JasonHu Üzgünüz, yorumunuzu tam olarak gözden geçirmedim, bir aramdaydım. Bir sorunuz varsa, devam edin. – Vikram

+0

Harika. ÇALIŞIYOR bir cazibe gibi. Başlangıçta seçilen durumlar için bir seçici yapmam gerektiğini düşündüm (seçildiğinde varsayılan olarak sadece 9patch ve LayerDrawable). Ama selectableItemBackground aslında geri çekilebilir görünüyor aslında çekicinin kendisi gibi görünüyor. Teşekkür ederim. –

İlgili konular