更改水平进度条颜色

时间:2016-09-29 13:33:19

标签: android styles progress-bar

问题描述

我正在尝试使用ProgressBar

中定义的自定义样式更改style.xml颜色

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的有用文章,但我想要简单的解决方案。我想我实施的方式应该有效。

我如何改变颜色?

4 个答案:

答案 0 :(得分:2)

您可以尝试使用:

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"

在Api 21 +的<style.../>作品中创建以下styles.xml(v21)

<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" />

答案 1 :(得分: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”属性

Yout可以创建ProgressDialog的实例,并使用

添加您的样式
// create progressDialog
final ProgressDialog myProgressDialog = new  ProgressDialog(MyActivity.this);
myProgressDialog.setProgressStyle(R.style.ProgressBar)
myProgressDialog.show();

答案 2 :(得分: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

答案 3 :(得分:0)

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