如何在自定义适配器中更改可绘制形状的背景颜色

Fai*_*ikh 3 android android-layout android-xml android-adapter android-drawable

我在自定义列表视图项目中有一个按钮,我正在使用以下可绘制的xml文件:

rounded_corner.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp" android:layout_height="100dp">

    <stroke
        android:width="1dp"
        android:color="#FFFFFF" />

    <solid android:color="#002832" />

    <padding
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <corners android:radius="5dp" />

</shape>
Run Code Online (Sandbox Code Playgroud)

我使用了"#002832"颜色作为drawable.现在,我想以编程方式更改可绘制文件的颜色.我怎样才能做到这一点?

请在没有理解问题的情况下停止标记为重复.

  1. 我检查了@Ganesh Pokele SO链接anf,它完全不同.

  2. 我查了@bizzard提供的链接但无法解决我的问题.

Fab*_*ioR 9

我在这篇文章中详细描述了你想要的内容,如果我理解你的问题,你可能想看看它.

基本上,你应该做的是创建另一个不同颜色的drawable并通过yourView.setBackground(Drawable drawable)以编程方式设置它:

another_round_corner.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp" android:layout_height="100dp">

    <stroke
        android:width="1dp"
        android:color="#002832" />

    <solid android:color="#002832" />

    <padding
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <corners android:radius="5dp" />

</shape>
Run Code Online (Sandbox Code Playgroud)

然后随时将背景设置为可绘制的.

编辑

由于OP不想使用另一个drawable,解决方案是使用这样的滤色器:

button.getBackground().setColorFilter(Color.rgb(40, 50, 60), PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)

您将获得所需的效果.PorterDuff.Mode.SRC_ATOP将您想要的颜色应用于背景,在另一种颜色的顶部,而不混合它们.您必须在第一个参数中传递颜色(颜色将来自服务器).如果它是十六进制的,只需将其转换为RGB,例如,或做任何你需要的转换.

您可以像这样以编程方式更改可绘制颜色,让我知道它是否适合您.

让我知道它是否对你有所帮助,如果有的话,请选择正确的答案,欢呼.