【问题标题】:How to change background color of drawable shape in custom adapter如何在自定义适配器中更改可绘制形状的背景颜色
【发布时间】:2016-10-19 12:58:40
【问题描述】:

我的自定义列表视图项中有一个按钮,我正在使用以下可绘制的 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>

我为该可绘制对象使用了“#002832”颜色。现在,我想以编程方式更改可绘制文件的颜色。我该怎么做?

请不要在不理解问题的情况下将其标记为重复。

  1. 我检查了@Ganesh Pokele SO link anf 完全不同。

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

【问题讨论】:

标签: android android-layout android-xml android-adapter android-drawable


【解决方案1】:

我在this post 中详细描述了您想要的内容,如果我能很好地理解您的问题,您可能想查看一下。

基本上,您应该做的是创建 另一个 具有不同颜色的可绘制对象,并通过 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>

然后随时将背景设置为此可绘制对象。

编辑

由于 OP 不想使用另一个可绘制对象,因此解决方案是使用这样的滤色器:

button.getBackground().setColorFilter(Color.rgb(40, 50, 60), PorterDuff.Mode.SRC_ATOP);

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

您始终可以像这样以编程方式更改可绘制颜色,如果它适合您,请告诉我。

如果对您有帮助,请告诉我,如果有帮助,请点赞/选择正确答案,干杯。

【讨论】:

  • drawable 的颜色可以是任何颜色,因此创建新的drawable 将无济于事。如果你有任何其他想法,请告诉我。
  • 但是创建另一个drawable有什么意义呢?
  • 颜色将来自服务器,它可以是任何东西,所以创建另一个可绘制对象有什么意义。如果我错了,请纠正我。
  • 确实有道理。好的,请查看我更新的答案,让我知道它是否适合您
  • 太棒了!我很高兴知道
【解决方案2】:

解决方案

  1. 如果您想以编程方式动态更改可绘制颜色,请使用此代码。

这是我的 xml rectangle_border


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="@color/gray"
    <corners android:topLeftRadius="5dp" android:bottomLeftRadius="5dp"
        android:topRightRadius="5dp" android:bottomRightRadius="5dp"/>
      <stroke android:color="@color/colorPrimary" android:width="1dp" />
</shape>

  1. 我在这里更改动态背景颜色
 Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.rectangle_border);
            Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
            DrawableCompat.setTint(wrappedDrawable, Color.parseColor(textcolor));
            //Here set the background in view
            holder.textrectangle_bgLL.setBackgroundResource(R.drawable.rectangle_border);

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多