android - 通过代码将图层列表设置为 View 的背景

标签 android

在 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/

相关文章:

android - 将 Planet.osm 与 osmDroid 一起用于离线 map

android - 在 Xamarin Forms Android 启动画面中使用两个图像

java - Android - Eclipse 在 SDK 2.2 上使用项目构建/运行速度很慢

android - 相对布局 : centering of two FrameLayout elements

android - 隐藏 fragment 的生命周期

android - 在android应用程序中访问手机的内部存储?

java - If...Else 语句总是转向 "else"。

Android:如何将 Spinner 选择与 AutoCompleteTextView 连接

android - 如何将 SONY Tablet S 安装为 ADB 设备?

android - Kotlin JaCoCo,无覆盖 -> IllegalClassFormatException ...请提供原始的非仪器类