You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何完整修改ProgressBar?咨询内部进度条样式调整方法

搞定ProgressBar内部进度条的样式修改问题

不用急着去做自定义组件!大多数情况下,你完全可以通过样式属性或者自定义Drawable来直接调整内部红色进度指示条的样式,下面分两种常见场景给你具体方案:

1. 原生Android水平ProgressBar

如果用的是原生的水平样式ProgressBar,有两种简单的修改方式:

快速改色:用XML属性直接设置

API 21及以上的系统,可以直接用android:progressTint属性修改进度条颜色,搭配android:backgroundTint改外部背景:

<ProgressBar
    android:id="@+id/horizontal_progress"
    android:layout_width="match_parent"
    android:layout_height="24dp"
    android:progress="65"
    android:progressTint="#FF6200EE" <!-- 内部进度条颜色 -->
    android:backgroundTint="#E5E5E5" <!-- 外部背景颜色 -->
    style="@android:style/Widget.ProgressBar.Horizontal" />

灵活定制:自定义Drawable文件

如果需要圆角、渐变这类更复杂的样式,就创建一个layer-list drawable:
res/drawable/custom_progress_bar.xml中写入:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 进度条背景层 -->
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="#E5E5E5" />
            <corners android:radius="12dp" /> <!-- 背景圆角 -->
        </shape>
    </item>
    <!-- 内部进度指示层 -->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <gradient
                    android:startColor="#FF6200EE"
                    android:endColor="#FF3700B3"
                    android:angle="0" /> <!-- 渐变进度条 -->
                <corners android:radius="12dp" /> <!-- 进度条圆角 -->
            </shape>
        </clip>
    </item>
</layer-list>

然后在布局里引用这个drawable:

<ProgressBar
    android:id="@+id/custom_progress"
    android:layout_width="match_parent"
    android:layout_height="24dp"
    android:progress="65"
    android:progressDrawable="@drawable/custom_progress_bar"
    style="@android:style/Widget.ProgressBar.Horizontal" />

2. Material Design组件的ProgressIndicator

如果你用的是Material库的LinearProgressIndicator(现在更推荐用这个替代旧ProgressBar),直接用组件属性就能搞定:

<com.google.android.material.progressindicator.LinearProgressIndicator
    android:id="@+id/material_progress"
    android:layout_width="match_parent"
    android:layout_height="18dp"
    android:progress="70"
    app:trackColor="#E5E5E5" <!-- 外部背景 -->
    app:indicatorColor="#FF6200EE" <!-- 内部进度条 -->
    app:trackCornerRadius="9dp"
    app:indicatorCornerRadius="9dp" />

什么时候需要自定义组件?

只有当你需要特别特殊的效果——比如动态变化的渐变、自定义的动画路径,或者和业务绑定的特殊交互——而上面的方法都满足不了时,再考虑继承ProgressBar或者View来写自定义组件。

内容的提问来源于stack exchange,提问作者Daniel Kaplan

火山引擎 最新活动