根据宽度百分比更改 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]));
}