我试图动态地绘制一个圆形作为textView的背景,但取而代之的是绘制整个方形背景
我尝试了一种有效的静态方式: 这是我的代码
circle_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<corners android:radius="4dip" />
<stroke
android:width="5dip"
android:color="@color/colorPrimary" />
<solid android:color="@color/colorPrimary" />
</shape>
list_item.xml
<TextView
android:id="@+id/tv_tag"
android:layout_width="50dp"
android:layout_height="54dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="25dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:background="@drawable/circle_drawable"
android:gravity="center"
android:text="B"
android:textColor="#fff"
android:textSize="30dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.454" />
它静态地用于:
TextView tv_tag = (TextView)v.findViewById(R.id.tv_tag);
tv_tag.setText(itemTag);
但是当我尝试使用setBackgroundColor
更改背景颜色时
TextView tv_tag = (TextView)v.findViewById(R.id.tv_tag);
tv_tag.setText(itemTag);
tv_tag.setBackgroundColor(Color.parseColor("#D81B60"));
任何帮助对我来说都是很棒的。
答案 0 :(得分:1)
setBackgroundColor
将不使用可绘制形状。它只会设置颜色,而不是您期望的形状。因此,使用setBackground
like-
tv_tag.setBackground(ContextCompat.getDrawable(context,R.drawable.circlw_drawable))
答案 1 :(得分:1)
TextView tv_tag = (TextView)v.findViewById(R.id.tv_tag);
tv_tag.setText(itemTag);
tv_tag.setBackground(ContextCompat.getDrawable(getApplicationContext(), R.drawable.circle_drawable));
答案 2 :(得分:1)
尝试这样,希望对您有所帮助。
GradientDrawable bg = (GradientDrawable)tv_tag.getBackground();
bg.setColor(Color.parseColor("#D81B60"));
答案 3 :(得分:1)
使用setBackgroundColor()
方法,我们更改了背景颜色,但将颜色设置为textView的背景,默认情况下,Android中任何视图的背景形状都是矩形。
要设置特定的背景形状,我们可以使用drawable。
在您的代码中,由于textview的矩形形状,更改了textView的背景颜色。
要更改背景颜色,您需要更改drawable的颜色。
请尝试以下代码更改可绘制对象的颜色:
将此代码添加到您的活动中
TextView tv_tag=findViewById(R.id.tv_tag);
Drawable mDrawable = getResources().getDrawable(R.drawable.circle_drawable);
mDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SCREEN));
tv_tag.setBackground(mDrawable);
答案 4 :(得分:1)
您可以像这样简单地对其进行修改
GradientDrawable bgShape = (GradientDrawable)btn.getBackground();
bgShape.setColor(Color.BLACK);