如何在Android上更改默认的ProgressBar圆圈颜色

时间:2015-08-17 17:46:48

标签: android styles override geometry android-progressbar

我目前在通过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>

如果我理解相关信息,则显示的圆圈颜色来自默认颜色(手机上的绿色)。 我需要改变它!

现在,我无法修改源代码,而库本身也无法以编程方式设置样式。

有一种方法可以更改应用级别的默认样式或更好地覆盖此特定样式吗?

由于 的Davide

4 个答案:

答案 0 :(得分:44)

如果您使用 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"/>

你的圈子现在是红色的!

答案 1 :(得分:29)

经过多次尝试,我找到了解决方案:

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”方法中执行此操作,否则它为null) 最重要的部分是魔术的“setColorFilter”。

答案 2 :(得分:3)

对于将来的参考,此更改对我有用:

在您的 values / styles.xml 文件的colorControlActivated中更改AppTheme

 <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/>标记执行任何操作。

答案 3 :(得分:0)

只需在 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"/>