如何设置Android进度栏的高度?


77

我的activity_main.xml是下面,你看,高度设为40浸。

在MyEclipse中,如下所示:

在此处输入图片说明

但是当我在手机上运行它时,如下所示:

在此处输入图片说明

所以我的问题是,为什么进度条的实际高度不是我设置的高度?如何增加进度条的高度?


4
progressBar.setScaleY(2f); 整数代表身高
Subramanyam chodi

Answers:


48

本教程中

<style name="CustomProgressBarHorizontal" parent="android:Widget.ProgressBar.Horizontal">
      <item name="android:progressDrawable">@drawable/custom_progress_bar_horizontal</item>
      <item name="android:minHeight">10dip</item>
      <item name="android:maxHeight">20dip</item>
</style>

然后只需将样式应用于您的进度条或更好的样式,覆盖主题中的默认样式即可自动为所有应用程序的进度条设置样式。

您在屏幕快照中看到的差异是因为手机/仿真器使用的是Android版本(最新是ICS(Holo)中的主题,顶部是原始主题)。


使用此样式。.style=“ @ android:style / Widget.Holo.Light.ProgressBar.Small.Inverse”。它的工作对我来说
sudharsan chandrasekaran

下面是该custom_progress_bar_horizo​​ntal绘制一个自由选择:stackoverflow.com/questions/16893209/...
Ashutosh说蒂瓦里

201

我猜最简单的解决方案是:

mProgressBar.setScaleY(3f);

4
实际上,这是唯一的解决方案。感谢您的分享
几十年的

2
这个答案只有4楼,使我的酒吧难以忍受的模糊,几乎就像上面带有发光的样式一样。
超越主题的

@beyondtheteal呵呵,但是高度实际上是DID改变的,不是吗?所以我不明白您为什么拒绝答案。如果您需要高度缩放的条,则可以创建自己的“ CustomProgressBar”。
Martin Pfeffer

2
请注意,如果您要在其上绘制某些内容(例如圆圈),则会得到缩放的版本(例如椭圆)
pushandpop

1
简单的解决方案,很好..您也可以直接添加
-android


20

用这个

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


15
您的答案与在ProgressBar上设置自定义高度有什么关系?
IgorGanapolsky

这样就解决了问题。您能解释一下为什么行得通吗?
2015年

1
@Alfred之所以有效,是因为样式不同。Widget ProgressBar的绘制部分可以拉伸以适合layout_height的整体,而常规的Android ProgressBar则不能。
编年史

2
这个解决方案有效!!以前我使用?android:attr/progressBarStyleHorizontal,这并不工作

14

如其他答案所述,您似乎正在设置进度条的样式以使用Holo.Light:

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

如果这在您的手机上运行,​​则可能是3.0或更高版本的设备。但是,您的模拟器看起来像使用“默认”进度条的模拟器。

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

也许您在创建屏幕截图之间将样式更改为“默认”进度条?不幸的是,如果您的项目使用Holo.Light进度栏,则2.x设备不会自动默认回到“默认”进度栏。它将崩溃。

如果您确实使用的是默认进度条,则按照建议设置最大/最小高度将可以正常工作。但是,如果您使用的是Holo.Light(或Holo)栏,则无法设置最大/最小高度。这是将最大/最小高度设置为25和100倾角的示例输出:

最大/最小设置为25度 25浸入高度进度栏

最大/最小设置为100度 100倾角高度进度条

您会看到底层可绘制对象(progress_primary_holo_light.9.png)并未按预期缩放。其原因是9色块边框仅缩放顶部和底部几个像素:

9补丁

当Android需要垂直调整.png大小时,以单像素黑色边框(绿色箭头)为边界的水平区域是被拉伸的部分。两个红色箭头之间的区域不会垂直拉伸。

解决此问题的最佳方法是更改​​9patch .png来拉伸栏而不是“画布区域”,然后创建自定义进度栏xml以使用这9patches。类似地在这里描述:https : //stackoverflow.com/a/18832349

这是我对非确定性的Holo.Light ProgressBar的实现。您必须为不确定性和Holo ProgressBars添加自己的9个补丁。理想情况下,我应该完全删除画布区域。相反,我离开了它,但是将“ bar”区域设置为可拉伸。 https://github.com/tir38/ScalingHoloProgressBar


10

这里有很多支持的解决方案对我来说不起作用,甚至不能接受答案。我通过设置scaleY来解决它,但是如果您需要太多高度,则不是一个好的解决方案,因为可绘制对象是像素化的。

以编程方式:


progressBar.setScaleY(2f);

XML布局:


android:scaleY="2"


4

值-> styles.xml

<style name="tallerBarStyle" parent="@android:style/Widget.SeekBar">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
    <item name="android:minHeight">8dip</item>
    <item name="android:maxHeight">20dip</item>
</style>

然后在您的ProgressBar中添加:

style="@style/tallerBarStyle"

好的答案,但是也比较完整。
伊曼纽尔

对水平进度条没有影响。
IgorGanapolsky

3

这是我使用的进度条。

<ProgressBar
     android:padding="@dimen/dimen_5"
     android:layout_below="@+id/txt_chklist_progress"
     android:id="@+id/pb_media_progress"
     style="@style/MyProgressBar"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_gravity="center"
     android:progress="70"
     android:scaleY="5"
     android:max="100"
     android:progressBackgroundTint="@color/white"
     android:progressTint="@color/green_above_avg" />

这是我的风格标签

 <style name="MyProgressBar" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
    <item name="android:progressBackgroundTint">@color/white</item>
    <item name="android:progressTint">@color/green_above_avg</item>
</style>

1

您可以使用LinearProgressIndicator材料成分库提供的和app:trackThickness属性:

<com.google.android.material.progressindicator.LinearProgressIndicator
    android:indeterminate="true"
    app:trackThickness="xxdp"
    ../>

12dp

在此处输入图片说明

4dp

在此处输入图片说明

注意:它至少需要version 1.3.0-alpha04


0

您可以将进度条的样式设置为此:

style="@android:style/Widget.ProgressBar.Horizontal"    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.