更改水平进度条颜色

3

问题描述

我正在尝试使用在 style.xml 中定义的自定义样式来更改 ProgressBar 的颜色。

layout.xml

<ProgressBar
        android:id="@+id/progress_bar"
        style="@style/ProgressTheme"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        android:indeterminateBehavior="repeat" />

style.xml

<style name="ProgressTheme" parent="Widget.AppCompat.ProgressBar.Horizontal">
        <item name="colorAccent">#000</item>
</style>

问题

我找到了一些关于如何通过编程或添加layer-list来改变颜色的有用文章,但我想要一个简单的解决方案。我认为我实现的方法应该可以工作。

我该如何改变颜色?


如何在Android中更改进度条的进度颜色 - Niccolò Passolunghi
@nicopasso 这不是重复的问题,因为我需要具体的解决方案,我想知道是否有一种直接从style.xml实现这个功能的方法。 - user5699130
你的问题是“我怎么改变颜色?”已经有很多答案了。顺便提一下,主题解决方案仅适用于API级别>= 21。 - Niccolò Passolunghi
请查看我的更新答案。 - Chintan Soni
4个回答

5

您可以尝试使用以下方法:

mProgressBar.getProgressDrawable().setColorFilter(Color.BLACK, android.graphics.PorterDuff.Mode.SRC_IN);

对于版本为棒棒糖及以上的系统,请使用以下代码:

mProgressBar.setProgressTintList(ColorStateList.valueOf(Color.BLACK));

如果您正在寻找XML解决方案,请尝试使用ProgressBar的以下属性(API 21+):
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@android:color/black"

styles.xml(v21) 中创建以下 <style.../> 可以在 Api 21+ 上使用:

<style name="blackProgressBar" parent="Widget.AppCompat.ProgressBar.Horizontal">
    <item name="android:indeterminateTintMode">src_atop</item>
    <item name="android:indeterminateTint">@android:color/black</item>
</style>

并将其应用为:

<ProgressBar
    ...
    style="@style/blackProgressBar" />

我需要使用我在问题中提到的样式来解决问题。 - user5699130

0

你需要添加 android:indeterminateTint="@color/red"。


0
您可以通过以下方式为进度对话框设置样式:创建一个带有圆环形状的可绘制文件(circular_progress_dialog.xml)。
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="270"
android:toDegrees="270">
<shape
    android:innerRadiusRatio="2.5"
    android:shape="ring"
    android:thickness="2dp"
    android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->

    <gradient
        android:angle="0"
        android:endColor="@color/main_background"
        android:startColor="@color/main_orange"
        android:type="sweep"
        android:useLevel="false" />
</shape>
</rotate>

为你的进度条添加样式

 <style name="ProgressBar" parent="@android:style/Widget.ProgressBar">
    <item name="android:layout_centerHorizontal">true</item>
    <item name="android:layout_centerVertical">true</item>
    <item name="android:visibility">gone</item>
    <item name="android:background">@color/transparency_pleca</item>
    <item name="android:indeterminateDrawable">@drawable/circular_progress_dialog</item>
</style>

请注意您的 "android:indeterminateDrawable" 属性

您可以创建一个 ProgressDialog 实例,并添加您的样式:

// create progressDialog
final ProgressDialog myProgressDialog = new  ProgressDialog(MyActivity.this);
myProgressDialog.setProgressStyle(R.style.ProgressBar)
myProgressDialog.show();

0
可能有些晚了,但我在这里为任何遇到同样问题的人提供解决方案。
在你的styles.xml文件中,为你的进度条添加一个新的样式。
<style name="CustomProgressBarTheme">
    <item name="colorAccent">@color/myProgressBarColor</item>
    <item name="android:progressBarStyle">@style/Widget.AppCompat.ProgressBar.Horizontal</item>
</style>

android:progressBarStyle 属性确保进度条是水平的。

只需将此样式添加到您的进度条中,并设置 android:indeterminate="true"

<ProgressBar
    android:id="@+id/progressbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    android:theme="@style/slang_lib_ProgressBarTheme" />

注意:在此处使用 style 属性将不起作用,请改用 android:theme


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接