如何在 Android 上更改默认 ProgressBar 圆圈颜色
Posted
技术标签:
【中文标题】如何在 Android 上更改默认 ProgressBar 圆圈颜色【英文标题】:How to change default ProgressBar circle color on Android 【发布时间】:2015-11-10 10:57:43 【问题描述】:我目前在通过 gradle 导入的 android 项目中使用外部库。 这个库显示了一个带有 ProgressBar 圆圈的通知栏。 这是我在它的源代码中找到的代码:
<ProgressBar
android:id="@+id/progress_bar"
android:layout_
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
style="@style/SuperActivityToast_Progress_ProgressBar"/>
关联的样式是这个:
<style name="SuperActivityToast_Progress_ProgressBar" parent="android:Widget.Holo.ProgressBar">
<item name="android:layout_width">32dp</item>
<item name="android:layout_marginLeft">8dp</item>
</style>
如果我理解正确的话,所示圆圈的颜色来自默认颜色(我手机上的绿色)。 我需要改变它!
现在,我无法修改源代码,而且库本身也不提供以编程方式设置样式的可能性。
有没有办法在应用级别更改默认样式或更好地覆盖此特定样式?
谢谢 大卫
【问题讨论】:
Android change Horizonal Progress bar color的可能重复 【参考方案1】:如果您使用的是 AppCompat 主题,它会使用 accentColor 为圆圈着色。
如果您想将其着色为与主题不同的颜色,则应考虑使用 ThemeOverylay。例如。如果你想让圆圈色调 red
你可以执行以下操作:
在你的styles.xml
<style name="RedAccent" parent="ThemeOverlay.AppCompat.Light">
<item name="colorAccent">#F00</item>
</style>
在您的ProgressBar
中,将主题设置为RedAccent
。
<ProgressBar
android:id="@+id/progress_bar"
android:layout_
android:layout_
android:theme="@style/RedAccent"/>
你的圈子现在会变成红色!
【讨论】:
谢谢!快速简便的解决方案,但仅在通过包含“@style”so android:theme="@style/RedAccent" 引用主题后才有效 - 谢谢 是的@CliveSargeant,很好。它必须是'@style/',因为我们引用了样式。我已经更新了答案。 这是一个非常有用的方法。我没有意识到我们可以用这种方式覆盖应用程序样式! 你是传奇的定义 这个解决方案对我不起作用,我必须按照下面的答案之一设置colorControlActivated
【参考方案2】:
经过多次尝试,我找到了解决方案:
ProgressBar progBar = (ProgressBar) context.getActivity().findViewById(R.id.progress_bar);
if (progBar != null)
progBar.setVisibility(View.VISIBLE);
progBar.setIndeterminate(true);
progBar.getIndeterminateDrawable().setColorFilter(0xFFFFFFFF, android.graphics.PorterDuff.Mode.MULTIPLY);
简单地说,我将获得由库创建的进度条对象的引用,并更改它的属性。 (在我的活动中,我必须在“OnStart”方法中执行此操作,否则为空) 最重要的部分是发挥神奇作用的“setColorFilter”。
【讨论】:
Mode.MULTIPLY 将颜色与进度条颜色相乘,如果有人想要纯纯色,请使用 PorterDuff.Mode.SRC_ATOP【参考方案3】:对于未来的参考,这个改变对我有用的是:
在 values/styles.xml 文件中更改 AppTheme
中的 colorControlActivated
:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Main theme colors -->
....
<!-- Color for circle in progress bar -->
<item name="colorControlActivated">#DC0808</item>
</style>
使用这种方法,您无需对 xml 文件中的 <ProgressBar/>
标记执行任何操作。
【讨论】:
colorControlActivated 会影响其他东西吗?如果是这样,哪个?深色主题的行为是否有所不同? @VivekPratapSingh 您是否在清单文件中设置了 AppTheme?<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="true" android:theme="@style/AppTheme">
【参考方案4】:
只需在 ProgressBar 中添加颜色,如下所示:
<ProgressBar
android:id="@+id/progressbar"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:visibility="gone"
android:indeterminateTint="@color/colorPrimary" // add color here
android:layout_centerVertical="true"/>
【讨论】:
请注意,indeterminateTint
仅适用于 API 级别 21 及更高级别!
像害虫一样保持质量以上是关于如何在 Android 上更改默认 ProgressBar 圆圈颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android上更改默认的ProgressBar圆圈颜色
如何在Android的谷歌地图片段中更改默认的蓝色圆形位置图标?