如何更改 Android 上的默认 ProgressBar 圆圈颜色
How to change default ProgressBar circle color on Android
我目前在通过 gradle.
导入的 Android 项目中使用外部库
该库显示带有 ProgressBar 圆圈的通知栏。
这是我在其来源中找到的代码:
<ProgressBar
android:id="@+id/progress_bar"
android:layout_height="match_parent"
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>
如果我理解正确,显示的圆圈颜色来自默认颜色(我 phone 上的绿色)。
我需要改变它!
现在,我无法修改源代码,而且库本身也不提供以编程方式设置样式的可能性。
有没有办法在应用级别更改 默认 样式或更好地覆盖此特定样式?
谢谢
大卫
经过多次尝试,我找到了解决方案:
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);
}
简单地说,我将获得库创建的进度条对象的引用,并更改它的属性。 (在我的 activity 中,我必须在 "OnStart" 方法中执行此操作,否则它为 null )
最重要的部分是施展魔法的 "setColorFilter"。
如果您使用 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_width="32dp"
android:layout_height="32dp"
android:theme="@style/RedAccent"/>
你的圈子现在变成红色了!
为了将来参考,此更改对我有用:
更改 values/styles 中 AppTheme
内的 colorControlActivated
。xml 文件:
<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/>
标记执行任何操作。
只需在 ProgressBar 中添加颜色,如下所示:
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:visibility="gone"
android:indeterminateTint="@color/colorPrimary" // add color here
android:layout_centerVertical="true"/>
我目前在通过 gradle.
导入的 Android 项目中使用外部库
该库显示带有 ProgressBar 圆圈的通知栏。
这是我在其来源中找到的代码:
<ProgressBar
android:id="@+id/progress_bar"
android:layout_height="match_parent"
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>
如果我理解正确,显示的圆圈颜色来自默认颜色(我 phone 上的绿色)。 我需要改变它!
现在,我无法修改源代码,而且库本身也不提供以编程方式设置样式的可能性。
有没有办法在应用级别更改 默认 样式或更好地覆盖此特定样式?
谢谢 大卫
经过多次尝试,我找到了解决方案:
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);
}
简单地说,我将获得库创建的进度条对象的引用,并更改它的属性。 (在我的 activity 中,我必须在 "OnStart" 方法中执行此操作,否则它为 null ) 最重要的部分是施展魔法的 "setColorFilter"。
如果您使用 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_width="32dp"
android:layout_height="32dp"
android:theme="@style/RedAccent"/>
你的圈子现在变成红色了!
为了将来参考,此更改对我有用:
更改 values/styles 中 AppTheme
内的 colorControlActivated
。xml 文件:
<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/>
标记执行任何操作。
只需在 ProgressBar 中添加颜色,如下所示:
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:visibility="gone"
android:indeterminateTint="@color/colorPrimary" // add color here
android:layout_centerVertical="true"/>