Android - 在棒棒糖前设备上着色ProgressBar

时间:2017-04-06 09:47:40

标签: android android-layout android-progressbar android-api-levels

我的应用程序的最低API级别为19(KitKat),并包含一个水平ProgressBar的布局。我正在使用android:progressTint属性将条形色调为自定义颜色。它在Lollipop(API 21)及更高版本上运行良好,但在下面(例如在API 19上)它没有;它以不同的颜色显示出来。原因是这个属性

  

仅用于API级别21及更高级别

正如Android Studio所述。

所以我想知道在Lollipop前设备上点亮ProgressBar的好方法。可以使用XML在布局文件中创建吗?或者这应该以不同的方式完成?

编辑#1:我的ProgressBar用于显示百分比的具体值,而不是用于指示我的布局正在加载。我想明确这一点,因为在尝试了Kuldeep Kulkarni在下面写的内容后,我的酒吧看起来像一个材料加载指示器(当然在Lollipop设备上,而不是KitKat设备上的任何可见结果)。

6 个答案:

答案 0 :(得分:20)

您可以使用ProgressBar indeterminateDrawable方法换取pre-Lollipop

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

     Drawable drawableProgress = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
     DrawableCompat.setTint(drawableProgress, ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
     progressBar.setIndeterminateDrawable(DrawableCompat.unwrap(drawableProgress));

} else {
    progressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN);
}

答案 1 :(得分:6)

progress.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);

答案 2 :(得分:4)

感谢大家的建议! :)

对我有用的解决方案是使用<layer-list>根元素创建自定义可绘制XML文件。在那里,我使用原生Android ID @android:id/background@android:id/progress定义了两个图层项。在此之后,我可以定义我想要使用的形状和颜色资源。此解决方案类似于this SO问题上更受欢迎的答案。

我的res/drawable/progressbar.xml文件的内容:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">

        <shape>

            <corners android:radius="2dip" /> <!--optional-->

            <gradient
                android:angle="270"
                android:endColor="@color/gray"
                android:startColor="@color/gray" />

        </shape>

    </item>

    <item android:id="@android:id/progress">

        <clip>

            <shape>

                <corners android:radius="2dip" /> <!--optional-->

                <gradient
                    android:angle="270"
                    android:endColor="@color/blue"
                    android:startColor="@color/blue" />

            </shape>

        </clip>

    </item>

</layer-list>

在布局XML文件中为progressDrawable定义为ProgressBar

<ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="0dp"
        android:layout_height="@dimen/progress_bar_height"
        android:progressDrawable="@drawable/progressbar" />

我没有机会在API 19下面测试它,但是在这个级别以上它可以很好地工作。

答案 3 :(得分:0)

这对我有用

<ProgressBar
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:theme="@style/progressBarBlue" />

然后在您的style.xml中定义progressBarBlue

<style name="progressBarWhite" parent="@style/Theme.AppCompat">
   <item name="colorAccent">@color/blue</item>
</style>

答案 4 :(得分:0)

如果您要通过编程方式进行操作,请尝试此操作

export class triggeredNotificationController{
    constructor($scope){
       this.$scope = $scope
    }
    $postLink(){
       this.$scope.deleteNotification();
    }
}

答案 5 :(得分:-3)

我希望这会对你有所帮助。 试试这个:

<ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        android:indeterminateTint="#F00"
        android:indeterminateTintMode="src_in" />