问题描述
我试图改变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
改变颜色的有用文章,但我想要简单的解决方案。我想我实现的方式应该是可行的。
如何改变颜色?
您可以尝试使用:
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)
works on Api 21+中创建以下<style.../>
:
<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" />
你可以这样设计你的进度对话框:创建一个可绘制的圆形文件(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();
可能会迟到,但是我把这个放在这里是为了其他人可能遇到同样的问题。
在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
。
您需要添加android:indeterminateTint="@color/red"