如何在Android上使用shape属性在运行时更改TextView的颜色?

发布于 2024-09-28 21:01:03 字数 839 浏览 6 评论 0原文

我正在使用这样的形状属性:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:padding="10dp">
<solid
    android:color="#FFFFFF" />
<corners
    android:bottomRightRadius="15dp"
    android:bottomLeftRadius="15dp"
    android:topLeftRadius="15dp"
    android:topRightRadius="15dp" />
</shape>

如果

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/rounded_textview">
        </TextView>

我使用以下方法在运行时更改颜色:

TextView.setBackgroundColor();

我使用的形状就会消失。我该怎么做才能用正确的方式改变它? 或者我是否必须为不同的颜色生成大量形状?

谢谢。

I'm using shape attribute like this:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:padding="10dp">
<solid
    android:color="#FFFFFF" />
<corners
    android:bottomRightRadius="15dp"
    android:bottomLeftRadius="15dp"
    android:topLeftRadius="15dp"
    android:topRightRadius="15dp" />
</shape>

and

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/rounded_textview">
        </TextView>

If I change the color at runtime with the following method:

TextView.setBackgroundColor();

The shape I used is disappear. What should I do to change it with the proper way?
Or should I must have to generate lots of shape for just different colors?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

◇流星雨 2024-10-05 21:01:03

我找到了一个 PaintDrawable 解决方案,其中包含颜色和半径属性。
但它必须在构造函数中设置颜色。所以我每次都必须在运行时新建一个 PaintDrawable 并将其设置为 TextView 的背景可绘制对象。

public static PaintDrawable getRoundedColorDrawable(int color, float radius, int padding) {
    PaintDrawable paintDrawable = new PaintDrawable(color);
    paintDrawable.setCornerRadius(radius);
    paintDrawable.setPadding(padding, padding, padding, padding);
    return paintDrawable;
}

I found a solution with PaintDrawable which contains color and radius attributes.
But It have to set the color in the contructor. So I have to new a PaintDrawable at runtime every time and set it to the background drawable of a TextView.

public static PaintDrawable getRoundedColorDrawable(int color, float radius, int padding) {
    PaintDrawable paintDrawable = new PaintDrawable(color);
    paintDrawable.setCornerRadius(radius);
    paintDrawable.setPadding(padding, padding, padding, padding);
    return paintDrawable;
}
小巷里的女流氓 2024-10-05 21:01:03

您需要使用正确的实体元素将背景设置为不同的形状。 setBackgroundColor 我相信只是一个捷径:

void setBackgroundColor(int color){
 ColorDrawable drawable = new ColorDrawable(color);
 setBackgroundDrawable(drawable);
}

所以是的,你需要一些形状:)

You need to set the background a different shape with the correct Solid element. setBackgroundColor I believe just is a short cut to something like:

void setBackgroundColor(int color){
 ColorDrawable drawable = new ColorDrawable(color);
 setBackgroundDrawable(drawable);
}

So yea you will need a few shapes :)

送你一个梦 2024-10-05 21:01:03

我也遇到了同样的问题

你可以使用这个方法

TextView tv = // ... //;
tv.setBackgroundResource(R.drawable.myshape);

它对我来说效果很好!

I had the same problem

You can use this method

TextView tv = // ... //;
tv.setBackgroundResource(R.drawable.myshape);

It works fine for me!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文