根据宽度百分比更改 TextView 背景
Change TextView background based on width percentage
我有一个浅绿色背景的简单 TextView:
<TextView
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@color/lightgreen"
/>
基本上我将此 TextView 用作自定义“overview/progressbar”。
因此,我想改变不同颜色的背景。
例如:
宽度的 0%-25% = 浅绿色
宽度的 25%-66% = 黄色
宽度的 66%-100% = 红色
所以看起来像这样:
它应该是这样的:
有什么好的解决方案吗?
我试过使用不同的 Segment ProgressBar 库,但是其中 none 可以选择设置颜色“分隔线”的百分比时间
试试这个方法:
//Get the percentage ProgressBar and then apply the command to the text
float x = LoadingProgress.getProgress() ;
if (x > 0.2 && x < 0.6){
MyTextView.setTextColor(getResources().getColor(R.color.colorGreen));
}
else if (x > 0.7)
{
MyTextView.setTextColor(getResources().getColor(R.color.colorYellow));
} else {
MyTextView.setTextColor(getResources().getColor(R.color.colorRed));
}
希望此解决方案对您有所帮助
您可以使用 ClipDrawable 执行此操作。
使用进度层列表创建层列表 (LayerDrawable),例如:
progress_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<clip android:drawable="@color/red" />
</item>
<item>
<clip android:drawable="@color/yellow" />
</item>
<item>
<clip android:drawable="@color/green" />
</item>
</layer-list>
并将其用作 TextView 的背景。
<TextView
android:id="@+id/progress_text_view"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@drawable/progress_bg" />
要应用进度值:
private static final int MAX_LEVEL = 10_000;
private static final float[] LEVELS_PCT = new float[]{.25f, .66f, 1f};
//
final LayerDrawable progressBg = (LayerDrawable) progressTextView.getBackground();
for (int index = 0, count = LEVELS_PCT.length; index < count; index++) {
progressBg.getDrawable(count - 1 - index)
.setLevel((int) (MAX_LEVEL * LEVELS_PCT[index]));
}
我有一个浅绿色背景的简单 TextView:
<TextView
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@color/lightgreen"
/>
基本上我将此 TextView 用作自定义“overview/progressbar”。 因此,我想改变不同颜色的背景。
例如:
宽度的 0%-25% = 浅绿色
宽度的 25%-66% = 黄色
宽度的 66%-100% = 红色
所以看起来像这样:
它应该是这样的:
有什么好的解决方案吗?
我试过使用不同的 Segment ProgressBar 库,但是其中 none 可以选择设置颜色“分隔线”的百分比时间
试试这个方法:
//Get the percentage ProgressBar and then apply the command to the text
float x = LoadingProgress.getProgress() ;
if (x > 0.2 && x < 0.6){
MyTextView.setTextColor(getResources().getColor(R.color.colorGreen));
}
else if (x > 0.7)
{
MyTextView.setTextColor(getResources().getColor(R.color.colorYellow));
} else {
MyTextView.setTextColor(getResources().getColor(R.color.colorRed));
}
希望此解决方案对您有所帮助
您可以使用 ClipDrawable 执行此操作。 使用进度层列表创建层列表 (LayerDrawable),例如:
progress_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<clip android:drawable="@color/red" />
</item>
<item>
<clip android:drawable="@color/yellow" />
</item>
<item>
<clip android:drawable="@color/green" />
</item>
</layer-list>
并将其用作 TextView 的背景。
<TextView
android:id="@+id/progress_text_view"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@drawable/progress_bg" />
要应用进度值:
private static final int MAX_LEVEL = 10_000;
private static final float[] LEVELS_PCT = new float[]{.25f, .66f, 1f};
//
final LayerDrawable progressBg = (LayerDrawable) progressTextView.getBackground();
for (int index = 0, count = LEVELS_PCT.length; index < count; index++) {
progressBg.getDrawable(count - 1 - index)
.setLevel((int) (MAX_LEVEL * LEVELS_PCT[index]));
}