Как сделать круг круга формы текста и установить другой цвет фона на основе условия
У меня есть 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"));
}
Ответы
Ответ 1
Если у вас относительно небольшое количество цветов, вы можете создать файл с возможностью рисования для каждого цвета, например создать файл 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>
Затем назначьте определение 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"
/>
Обратите внимание, что ширина в два раза больше радиуса радиуса фона.
Чтобы изменить цвет кода:
TextView v = (TextView) findViewById(R.id.my_text_view);
v.setBackgroundResource(R.drawable.bg_blue);
Ответ 2
Чтобы добавить к принятому ответу, добавив размер тега внутри формы и убедившись, что высота и ширина достаточно велики, убедитесь, что фон окружен, даже если 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>
Ответ 3
TextView textView = (TextView) findViewById(R.id.my_text_view);
Drawable drawable = textView.getBackground();
drawable.setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);
работает для меня
Ответ 4
Добавьте файл circle_hired.xml в ваш drawable,
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<solid android:color="@color/map_hide_bg"/>
<stroke android:width="1dip" android:color="@color/map_hide_bg" />
</shape>
но в вашем файле xml файла макета вам необходимо исправить ширину и высоту текста. он даст круговую форму.
<TextView
android:id="@+id/tvMessages"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center"
android:background="@drawable/circular_message"
android:padding="4dp"
android:text="5"
android:textColor="@color/white_color"
android:textSize="@dimen/txt12"
android:visibility="visible"
/>
Я уверен, что это вам поможет,
Ответ 5
Вы также можете добиться этого, установив цвет в фоновом режиме как
TextView textView = (TextView) findViewById(R.id.my_text_view);
((GradientDrawable)textView.getBackground()).setColor(R.color.my_color);