Widget.AppCompat与Material水平ProgressBar样式区别及API24下选型
两种水平进度条样式的核心区别
- 适配逻辑不同:
Widget.AppCompat.ProgressBar.Horizontal属于AppCompat兼容库提供的样式,核心作用是抹平不同Android系统版本的样式差异,只要你的App使用AppCompat/MaterialComponents系列主题,它在所有系统版本上的表现都是统一的。Widget.Material.ProgressBar.Horizontal是Android原生系统自带的样式,仅在API 21及以上系统支持,而且可能被厂商定制ROM修改原生样式,不同设备上的表现可能有差异。 - 样式跟随规则不同:AppCompat样式的进度条会自动匹配你App主题中配置的
colorPrimary、colorSecondary等属性,不需要额外调整就能和App整体风格统一。原生Material样式默认调用系统框架层的主题颜色,大概率和你App的自定义主题不匹配,需要单独配置颜色属性才能对齐设计风格。 - 依赖要求不同:使用AppCompat样式需要项目引入AppCompat或MaterialComponents依赖库,原生Material样式属于系统内置资源,不需要额外依赖。
你给出的代码可以正常使用
你当前的最低SDK版本是API 24,远高于原生Material进度条要求的最低API 21,直接使用下面的代码语法合法,运行不会出现版本兼容错误:
<ProgressBar android:id="@+id/t_progressbar1" style="@android:style/Widget.Material.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" />
唯一需要注意的是部分厂商定制系统可能修改原生进度条的默认样式,可能出现和设计稿不一致的情况。
更推荐使用AppCompat系列样式
优先选择Widget.AppCompat.ProgressBar.Horizontal,如果你的项目已经迁移到MaterialComponents主题,也可以用Widget.MaterialComponents.ProgressBar.Horizontal,优势如下:
- 样式一致性更强,不受厂商系统定制的影响,所有设备上的显示效果都和你App的主题配置对齐
- 可定制性更高,支持更多自定义属性调整圆角、粗细、各状态颜色等,不需要额外编写自定义drawable
- 后续维护成本更低,就算之后你需要降低App的最低SDK版本,或者升级到Material Design 3规范,不需要大改组件配置就能适配
内容的提问来源于stack exchange,提问作者Chaitanya Karmarkar
相关产品推荐
相关产品推荐

