在 ListView 的适配器中,我将 child 的背景设置为:
view.setBackgroundResource(R.drawable.bg_checked);
这是背景文件:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<color android:color="@color/gold" />
</item>
<item>
<nine-patch
android:src="@drawable/bg_base_image"
android:dither="true" />
</item>
<item>
<bitmap
android:src="@drawable/bg_stripes_golden_image"
android:antialias="true"
android:dither="true"
android:tileMode="repeat" />
</item>
</layer-list>
尽管如您所见,这个可绘制对象是一个 <layer-list>
并包含带有重复图像的位图。问题是当我通过 XML 设置背景时它工作正常,但是当我通过 Java 设置它时背景不会重复并且图像只是被拉伸(stretch)。有没有其他方法可以通过 Java 设置这种类型的背景?
最佳答案
您可以尝试使用 LayerDrawable 在代码中创建整个图层列表.我认为您只需在 Resources
对象上调用 getDrawable(R.drawable.bg_layer1)
(这可以通过调用 context.getResources()
) 获取每一层并将其放入Drawable
数组中以构造LayerDrawable
。然后将 View 的背景可绘制对象设置为您的 LayerDrawable
。
例子:
//Method to get the LayerDrawable
private LayerDrawable getLayerDrawable(){
Resources res = context.getResources();
Drawable layer1 = res.getDrawable(R.drawable.first_layer);
Drawable layer2 = res.getDrawable(R.drawable.second_layer);
//...
Drawable layerX = res.getDrawable(R.drawable.x_layer);
return new LayerDrawable(new Drawable[]{layer1, layer2, layerX});
}
//Wherever you're setting the background, just do:
view.setBackgroundDrawable(getLayerDrawable());
关于android - 通过代码将图层列表设置为 View 的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157098/