我将9patch设置为布局的背景。但是,我仍然想通过使用selectableItemBackground
attr提供触摸反馈。
我试过使用带有9patch的<layer-list>
和selectableItemBackground
作为第二个android:drawable
的<item>
,但是没有用。
我也可以尝试做一个选择器,并用selectableItemBackground
覆盖list_selector_background_pressed.xml
中<layer-list>
的android渐变可绘制对象。但是在4.4 KitKat中,所选的背景颜色实际上是灰色,而不是JellyBeans中的蓝色,因此我无法真正对其进行硬编码:(
必须有一种更简单的方法,对吧? D:
最佳答案
是的,图层列表(或状态列表)中的drawable属性不接受attr
值。您会看到一个Resource.NotFoundException
。查看LayerDrawable的(或StateListDrawable的)源代码可以说明原因:您提供的值假定为drawable的id。
但是,您可以在代码中检索属性的主题和特定于平台的可绘制对象:
// 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"