代码之家  ›  专栏  ›  技术社区  ›  Faizan Haidar Khan

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

  •  -1
  • Faizan Haidar Khan  · 技术社区  · 6 年前

    这是我在布局中的文本视图。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" />
    

    这是圆圈。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 回复  |  直到 6 年前
        1
  •  1
  •   Faizan Haidar Khan    6 年前

    我一直在使用下面的代码和随机颜色

    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);
    
        2
  •  0
  •   LaVepe    6 年前

    你可以把它拉出来,然后用 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的构造函数中实现了这一点。