我的应用程序的最低API级别为19(KitKat),并包含一个水平ProgressBar
的布局。我正在使用android:progressTint
属性将条形色调为自定义颜色。它在Lollipop(API 21)及更高版本上运行良好,但在下面(例如在API 19上)它没有;它以不同的颜色显示出来。原因是这个属性
仅用于API级别21及更高级别
正如Android Studio所述。
所以我想知道在Lollipop前设备上点亮ProgressBar
的好方法。可以使用XML在布局文件中创建吗?或者这应该以不同的方式完成?
编辑#1:我的ProgressBar用于显示百分比的具体值,而不是用于指示我的布局正在加载。我想明确这一点,因为在尝试了Kuldeep Kulkarni在下面写的内容后,我的酒吧看起来像一个材料加载指示器(当然在Lollipop设备上,而不是KitKat设备上的任何可见结果)。
答案 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" />