如何创建一个水平加载进度条?

105

卸载安卓应用或进行某些配置时,会显示如下所示的水平进度条:

progress bar

它的样式与 @android:style/Widget.ProgressBar.Horizontal 不同。

如何在我的应用中使用它?


https://dev59.com/S2Yr5IYBdhLWcg3wFGZS#15788598 - StepanM
7个回答

215

只需添加一行STYLE代码,您的进度条就会变成水平:

<ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/progress"
        android:layout_centerHorizontal="true"      
        android:layout_centerVertical="true"      
        android:max="100" 
        android:progress="45"/>

它可以工作,但不是动态水平条...需要保持在进度45上的恒定状态。 - Tarit Ray
+1 是因为这是我找到的第一个可行的选项。如何设置进度条的颜色(而不是背景)? - Taslim Oseni
1
@TaslimOseni 你可以通过 progress.setProgressTintList(ColorStateList.valueOf(Color.GREEN)); 来设置进度条的颜色。 - Akash kumar

82

使用新进度条

style="?android:attr/progressBarStyleHorizontal"

使用旧的灰色进度条,请使用

style="@android:style/Widget.ProgressBar.Horizontal"

在这个选项中,您可以通过设置minHeight来更改高度。

完整的XML代码如下:

<ProgressBar
    android:id="@+id/pbProcessing"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tvProcessing"
    android:indeterminateOnly="true"/>

当设置indeterminateOnly为true时,可以获取到不确定状态的水平进度条。


1
这两种风格有什么不同? - TWiStErRob

80

如果我在手机上设置了android:indeterminate="true",那么这就是我手机上的Widget.ProgressBar.Horizontal


7
此外,请务必将高度设置为“wrap_content”(或更大),我花了将近一个小时才弄清楚为什么进度条没有显示...-.- - milosmns

17

布局中的进度条

<ProgressBar 
    android:id="@+id/download_progressbar"
    android:layout_width="200dp"
    android:layout_height="24dp"
    android:background="@drawable/download_progress_bg_track"
    android:progressDrawable="@drawable/download_progress_style"
    style="?android:attr/progressBarStyleHorizontal"
    android:indeterminate="false"
    android:indeterminateOnly="false" />

download_progress_style.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/progress">
        <scale 
          android:useIntrinsicSizeAsMinimum="true" 
          android:scaleWidth="100%" 
          android:drawable="@drawable/store_download_progress" />
    </item>
</layer-list>

store_download_progress.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ff207d94" />
</shape>

11
现在你可以很容易地使用材料设计中的LinearProgressIndicator来创建它,还有很多自定义选项。
<com.google.android.material.progressindicator.LinearProgressIndicator
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="true" />

请查看MaterialDesign链接以获取更多信息和代码示例。

https://material.io/components/progress-indicators/android#using-progress-indicators

在Jetpack Compose中,您可以使用LinearProgressIndicator进行颜色和背景自定义,并且还可以设置进度。
LinearProgressIndicator()

6

对我来说有效,你可以尝试相同的方法

<ProgressBar
    android:id="@+id/determinateBar"
    android:indeterminateOnly="true"
    android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
    android:indeterminateDuration="10"
    android:indeterminateBehavior="repeat"
    android:progressBackgroundTint="#208afa"
    android:progressBackgroundTintMode="multiply"
    android:minHeight="24dip"
    android:maxHeight="24dip"
    android:layout_width="match_parent"
    android:layout_height="10dp"
    android:visibility="visible"/>

1
如果您想要一个像这样的进度条:

enter image description here

然后,您可以将此样式添加到进度条中:

?android:attr/progressBarStyleHorizontal

那么你的进度条将会是这样:

<ProgressBar
        android:id="@+id/loading"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        android:progress="10"
        android:layout_margin="10dp"
        android:indeterminate="false" />

我使用这个来显示下载进度指示器。 - francis

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