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