如何从适配器更改文本视图的颜色,textView的背景在drawable中定义

时间:2018-09-03 06:11:44

标签: android android-layout

这是我在layout.xml中的文本视图

<TextView
    android:id="@+id/tvCharacter"
    android:layout_width="0dp"
    android:layout_height="@dimen/_43sdp"
    android:layout_gravity="center"
    android:layout_weight="1.8"
    android:paddingBottom="@dimen/_1sdp"
    android:paddingTop="@dimen/_1sdp"
    android:background="@drawable/rounded_textview"
    android:text="H"
    android:gravity="center"
    android:textSize="@dimen/_28ssp"
    android:textColor="#fff"
    android:visibility="gone"
    />

这是背景,用于文本视图以实现圆形

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/circle" />

这是circle.xml文件,这是我要更改的textView的背景颜色

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">

<solid android:color="#9FE554" />

<stroke
    android:width="0dp"
    android:color="#000" />

2 个答案:

答案 0 :(得分:0)

您可以获取可绘制对象,然后使用setColorFilter方法更改其颜色,最后为TextView设置新背景:

Drawable drawable = itemView.getContext().getDrawable(R.drawable.circle);
drawable.setColorFilter(ContextCompat.getColor(itemView.getContext(), R.color.colorPrimary),
                            PorterDuff.Mode.SRC_ATOP);
tvCharacter.setBackground(drawable);

在这种情况下,我认为您不需要@ drawable / rounded_textview。我将TextView背景设置为@ drawable / circle。

注意:我使用itemView.getContext()是因为我是在ViewHolder的构造函数中实现的。

答案 1 :(得分:0)

我通过使用以下代码来做到这一点,并一直使用随机颜色

Random r = new Random();
        int red=r.nextInt(255 - 0 + 1)+0;
        int green=r.nextInt(255 - 0 + 1)+0;
        int blue=r.nextInt(255 - 0 + 1)+0;
        int alpha = 200;

        GradientDrawable draw = new GradientDrawable();
        draw.setShape(GradientDrawable.OVAL);
        draw.setColor(Color.argb(alpha,red,green,blue));
        viewHolder.tvCharacter.setBackground(draw);