如何仅通过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:自定义主题样式(全局生效)
- 在你的themes.xml中添加自定义ProgressDialog专属样式:
<style name="CustomProgressDialog" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/你需要的进度条颜色</item> <item name="android:indeterminateTint">@color/你需要的进度条颜色</item> </style>
- 初始化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
相关产品推荐
相关产品推荐

