按层代码将图层列表设置为视图的背景

时间:2013-04-22 21:32:53

标签: android

在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设置此类背景?

1 个答案:

答案 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());