You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio项目ProgressBar显示Android5旧样式问题求解

问题现象

在Android项目中添加ProgressBar控件时,控件显示为Android 5版本时期的老旧样式,即使打包适配高版本Android系统,样式仍不更新,同时控件动画存在明显卡顿,无法显示默认的Material Design风格ProgressBar。

ProgressBar旧样式效果截图

问题相关布局代码如下:

<ProgressBar
        android:id="@+id/progressBar3"
        android:layout_width="match_parent"
        android:indeterminate="true"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progressBar5"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

对应模块build.gradle的defaultConfig配置:

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 30
    versionCode 1
    versionName "0.1"
}
问题原因

核心原因是项目未使用Material Components系列主题,要么继承了旧版AppCompat主题,要么直接使用了系统原生主题,控件会直接调用当前系统版本的原生实现,因此回退到老旧样式,旧版原生控件的动画实现本身存在性能问题,会出现卡顿。

修复方案
  • 引入Material依赖:打开模块级build.gradle文件,在dependencies节点添加Material组件库依赖,版本可根据项目现有androidx依赖版本匹配选择,不需要强制使用最新版:
dependencies {
    implementation 'com.google.android.material:material:1.9.0'
}
  • 配置全局主题:打开res/values/styles.xml(若配置了夜间模式,需同步修改res/values-night/styles.xml),将应用主题的parent修改为Material Components主题,原有自定义的主题属性(颜色、状态栏配置等)可直接保留,无需修改:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- 原有自定义主题属性保留在这 -->
</style>

如果暂时不想全量替换全局主题,也可以直接给单个ProgressBar控件指定Material样式,不需要修改全局主题即可生效:圆形进度条添加style="@style/Widget.MaterialComponents.ProgressBar",水平进度条添加style="@style/Widget.MaterialComponents.ProgressBar.Horizontal"。

  • 修正布局中的样式引用:将水平ProgressBar的样式从平台原生属性?android:attr/progressBarStyleHorizontal修改为Material库提供的属性?attr/progressBarStyleHorizontal,避免引用系统原生的旧样式。
  • 同步Gradle配置,执行Clean Project清除构建缓存后重新编译运行,ProgressBar即可显示为正常的Material Design风格,动画卡顿问题也会同步解决。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:12:18