Android:如何在java代码中动态更改TextView的可绘制背景的颜色

时间:2017-06-17 20:42:10

标签: android


我需要使用带有动态颜色的圆形背景制作TextView 我知道如何制作可绘制的背景,但我不知道如何在代码中更改它的颜色?

drawable bg xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/colorPrimary"></solid>
<!-- I want to change this color dynamically in the java code --> 
            <corners android:radius="7dp"></corners>
        </shape>
    </item>


</selector>


布局xml中的textview:

<TextView
            android:id="@+id/txt_taskTag"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/bg_rounded_solid"
            android:paddingEnd="10dp"
            android:paddingStart="10dp"
            android:text="work"
            android:textColor="#fff"
            android:layout_marginEnd="10dp"
            android:textSize="12sp" />

在Java文件代码中:

 public void onBindViewHolder(final ViewHolder holder, int position) {  

       holder.txt_taskCategory.setText(holder.mTask._catName);
       holder.txt_taskCategory.setBackgroundColor( Color.parseColor( holder.mTask._catColor));
    //when i do that it remove the drawable background and just color it.


}

我需要的是改变可绘制背景(而不是Textview)的颜色"holder.mTask._catColor"

2 个答案:

答案 0 :(得分:2)

你可以这样做:

Drawable drawable = getResources().getDrawable(R.drawable.bg_rounded_solid);
drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
yourTextView.setBackground(drawable);

这应该有用(没有经过测试,只是在我脑海中)! 只需在更改颜色后重置drawable。

答案 1 :(得分:1)

您还可以创建2个单独的drawable并相应地切换它们。