?android: attr / selectableItemBackground с другим существующим фоном
у меня есть набор 9patch в качестве фона моего макета. Однако я все еще хочу обеспечить обратную связь касания, используя selectableItemBackground
attr.
Я пробовал использовать <layer-list>
С 9patch и selectableItemBackground
Как android:drawable
второй <item>
, однако это не сработало.
я мог бы также попробовать сделать селектор и наложить градиент drawable android использует для selectableItemBackground
на list_selector_background_pressed.xml
С <layer-list>
. Но в 4.4 KitKat выбранный цвет фона на самом деле серый, а не синий в JellyBeans, поэтому я не могу его жестко закодировать: (
должен быть более простой способ, верно, ребята? Д:
1 ответов
Я пробовал использовать a с 9patch и selectableItemBackground в качестве android:drawable второго , однако это не сработало.
да, атрибут drawable в списке слоев (или списке состояний) не принимает attr
значение. Вы увидите Resource.NotFoundException
. Взгляд на исходный код LayerDrawable (или StateListDrawable) объясняет, почему: значение, которое вы предоставляете, считается идентификатором drawable.
но, вы можете получить тему и специфичный для платформы drawable для атрибута в коде:
// 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();
теперь, вы можете создать 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);
Вам также нужно установить :
android:clickable="true"