How to set the Android progressbar's height?

2019-01-17 02:05发布

My activity_main.xml is below, as you see, the height is set 40 dip.

And in MyEclipse, it looks like below:

enter image description here

But when I run it on my phone, it looks like below:

enter image description here

So my question is why the real height of the progressbar is not the one I set? How to increase the height of the progressbar?

8条回答
我想做一个坏孩纸
2楼-- · 2019-01-17 03:07

This is the progress bar I have used.
<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" />

And this is my style tag

 <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>
查看更多
手持菜刀,她持情操
3楼-- · 2019-01-17 03:12

As mentioned in other answers, it looks like you are setting the style of your progress bar to use Holo.Light:

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

If this is running on your phone, its probably a 3.0+ device. However your emulator looks like its using a "default" progress bar.

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

Perhaps you changed the style to the "default" progress bar in between creating the screen captures? Unfortunately 2.x devices won't automatically default back to the "default" progress bar if your projects uses a Holo.Light progress bar. It will just crash.

If you truly are using the default progress bar then setting the max/min height as suggested will work fine. However, if you are using the Holo.Light (or Holo) bar then setting the max/min height will not work. Here is a sample output from setting max/min height to 25 and 100 dip:

max/min set to 25 dip: 25 dip height progress bar

max/min set to 100 dip: 100 dip height progress bar

You can see that the underlying drawable (progress_primary_holo_light.9.png) isn't scaling as you'd expect. The reason for this is that the 9-patch border is only scaling the top and bottom few pixels:

9-patch

The horizontal area bordered by the single-pixel, black border (green arrows) is the part that gets stretched when Android needs to resize the .png vertically. The area in between the two red arrows won't get stretched vertically.

The best solution to fix this is to change the 9patch .png's to stretch the bar and not the "canvas area" and then create a custom progress bar xml to use these 9patches. Similarly described here: https://stackoverflow.com/a/18832349

Here is my implementation for just a non-indeterminant Holo.Light ProgressBar. You'll have to add your own 9-patches for indeterminant and Holo ProgressBars. Ideally I should have removed the canvas area entirely. Instead I left it but set the "bar" area stretchable. https://github.com/tir38/ScalingHoloProgressBar

查看更多
登录 后发表回答