在listview的适配器中,我使用:
设置子项的背景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>
虽然你可以看到这个drawable是<layer-list>
并且包含一个带有重复图像的位图。问题是,当我通过XML设置背景时,它可以正常工作,但是当我通过Java设置它时,背景不会重复,图像只是被拉伸。是否有其他方法可以通过Java设置此类背景?
答案 0 :(得分:1)
您可以尝试使用LayerDrawable在代码中创建整个图层列表。我想你只需在getDrawable(R.drawable.bg_layer1)
对象上调用Resources
(这可以通过调用context.getResources()
获得)来获取每一层并将其放入Drawable
数组中以构建LayerDrawable
。然后将视图的背景drawable设置为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());