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

如何仅通过themes.xml修改Progress Dialog的圆形进度条颜色(不使用style.xml)

解决ProgressDialog圆形进度条颜色不生效问题

问题场景

修改themes.xml中的colorAccent、primary、secondary颜色后,ProgressDialog的圆形进度条颜色仍无变化,项目仅存在themes.xml及深色模式版本,无style.xml文件。

效果参考图:
效果参考图

原有创建代码:

mLoginProgress.setTitle(resources.getString(R.string.loginloadingtitle));
mLoginProgress.setMessage(resources.getString(R.string.loginloadingmessage));
mLoginProgress.setCanceledOnTouchOutside(false);
mLoginProgress.show();

解决方案

方案1:动态修改颜色(无需调整主题,生效最快)

在调用show()方法后,手动修改进度条的着色属性即可,代码如下:

mLoginProgress.show();
ProgressBar progressBar = mLoginProgress.findViewById(android.R.id.progress);
if (progressBar != null) {
    progressBar.getIndeterminateDrawable().setColorFilter(
        ContextCompat.getColor(this, R.color.你需要的进度条颜色),
        PorterDuff.Mode.SRC_IN
    );
}

方案2:自定义主题样式(全局生效)

  1. 在你的themes.xml中添加自定义ProgressDialog专属样式:
<style name="CustomProgressDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/你需要的进度条颜色</item>
    <item name="android:indeterminateTint">@color/你需要的进度条颜色</item>
</style>
  1. 初始化ProgressDialog时传入该样式:
// 初始化时指定自定义样式,替换原有初始化逻辑
ProgressDialog mLoginProgress = new ProgressDialog(this, R.style.CustomProgressDialog);
// 原有配置代码保留
mLoginProgress.setTitle(resources.getString(R.string.loginloadingtitle));
mLoginProgress.setMessage(resources.getString(R.string.loginloadingmessage));
mLoginProgress.setCanceledOnTouchOutside(false);
mLoginProgress.show();

注意事项

如果修改全局colorAccent不生效,确认属性是添加在当前应用正在使用的主主题节点下,而非单独声明的其他样式节点中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:39:03