如何制作文本视图形状圆并根据条件设置不同的背景颜色

And*_*Dev 27 android

我有一个TextView,我想要的是制作TextView形状圆,然后根据我使用的不同条件设置不同的背景颜色.我可以根据不同的条件设置背景颜色,但不能制作TextView形状圆.那怎么可以做到.请帮我解决这个问题.

我用的代码是

        TextView txt_stage_display   = (TextView)findViewById(R.id.txt_stage_display);

        if(m_enStage[position] == enSTAGE_START)
        {
            txt_stage_display.setBackgroundColor(Color.parseColor("#D48393"));              
        }

        else if(m_enStage[position] == enSTAGE_FLOW)
        {

            txt_stage_display.setBackgroundColor(Color.parseColor("#D48393"));              
        }
        else if(m_enStage[position] == enSTAGE_SAFE)
        {

            txt_stage_display.setBackgroundColor(Color.parseColor("#66B0CC"));              
        }
        else if(m_enStage[position] == enSTAGE_UNSAFE)
        {
            txt_stage_display.setBackgroundColor(Color.parseColor("#D8C627"));              
        }
        else if(m_enStage[position] == enSTAGE_FERTILE)
        {
            txt_stage_display.setBackgroundColor(Color.parseColor("#67A05E"));                                  
        }
        else
        {

            txt_stage_display.setBackgroundColor(Color.parseColor("#808080"));              
        }
Run Code Online (Sandbox Code Playgroud)

yoa*_*oah 47

如果你有相对较小的颜色,你可以为每种颜色创建一个可绘制的文件,例如创建一个文件bg_red.xml:

<?xml version="1.0" encoding="utf-8"?>
<item xmlns:android="http://schemas.android.com/apk/res/android">
  <shape>
      <solid android:color="#f00" />
      <corners
          android:topLeftRadius="30dp"
          android:topRightRadius="30dp"
          android:bottomLeftRadius="30dp"
          android:bottomRightRadius="30dp"
          />
  </shape>
</item>
Run Code Online (Sandbox Code Playgroud)

然后分配定义TextView:

<TextView 
    android:id="@+id/tv"
    android:layout_height="60dp"
    android:layout_width="60dp" 
    android:text="X" 
    android:textColor="#fff"
    android:textSize="20sp"
    android:background="@drawable/bg_red"
    android:gravity="center_vertical|center_horizontal" 
    />
Run Code Online (Sandbox Code Playgroud)

请注意,宽度是背景角半径的两倍.

要从代码更改颜色:

TextView v = (TextView) findViewById(R.id.my_text_view);
v.setBackgroundResource(R.drawable.bg_blue);
Run Code Online (Sandbox Code Playgroud)

  • 实际上我需要删除项目,因为无效,我改为:`<?xml version ="1.0"encoding ="utf-8"?> <shape xmlns:android ="http://schemas.android.com/ apk/res/android"> <solid android:color ="@ color/neutral"/> <corner android:topLeftRadius ="60dp"android:topRightRadius ="60dp"android:bottomLeftRadius ="60dp"android:bottomRightRadius ="60dp "/> </ shape>`PS!如果你将背景设置为资源或颜色,然后你想设置形状 - 它不会工作.您不能设置任何背景如果您想使用形状.改为使用形状xml文件中的颜色! (7认同)
  • @androiddeveloper它是一个简单的方法,它定义了一个扩展Drawable的类,在draw方法中调用canvas.drawCircle.然后你可以添加像setColor这样的方法 (2认同)

Sud*_*sri 23

要添加到接受的答案,在形状内添加大小标签并确保高度和宽度足够大,即使textView有很多字符,也要确保背景为圆形!

<shape>
 <solid android:color="#f00" />
 <corners
    android:topLeftRadius="30dp"
   android:topRightRadius="30dp"
     android:bottomLeftRadius="30dp"
     android:bottomRightRadius="30dp"
     />
 <size 
  android:height="25dp"
   android:width="25dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)


小智 6

TextView textView = (TextView) findViewById(R.id.my_text_view);             
Drawable drawable = textView.getBackground();
drawable.setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);
Run Code Online (Sandbox Code Playgroud)

适合我