我将9patch设置为布局的背景。但是,我仍然希望使用selectableItemBackground
attr。
我尝试将<layer-list>
与9patch一起使用,selectableItemBackground
作为第二个android:drawable
的{{1}},但这不起作用。
我还可以尝试制作一个选择器,并使用<item>
覆盖selectableItemBackground
list_selector_background_pressed.xml
中<layer-list>
的渐变可绘制机器人用途。但是在4.4 KitKat中,所选的背景颜色在JellyBeans中实际上是灰色而不是蓝色,所以我无法对其进行硬编码:(
必须有一种更简单的方法,对吧? d:
答案 0 :(得分:16)
我尝试过使用9patch和 selectableItemBackground作为android:第二个drawable, 但这没效果。
是的,图层列表(或状态列表)中的drawable属性不接受attr
值。你会看到Resource.NotFoundException
。查看LayerDrawable(或StateListDrawable)的源代码可以解释原因:您提供的值假定为drawable的id。
但是,您可以在代码中检索属性的主题和特定于平台的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);
您还需要设置yourLayoutContainer's clickable
属性:
android:clickable="true"