【问题标题】:How to set the Android progressbar's height?如何设置Android进度条的高度?
【发布时间】:2012-11-10 16:35:52
【问题描述】:

我的activity_main.xml 在下面,如您所见,高度设置为 40 倾角。

在 MyEclipse 中,它如下所示:

但是当我在手机上运行它时,它看起来像下面这样:

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

【问题讨论】:

  • progressBar.setScaleY(2f);整数表示高度

标签: android progress-bar android-progressbar


【解决方案1】:

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

mProgressBar.setScaleY(3f);

【讨论】:

  • 事实上这是唯一的解决方案。感谢分享
  • 这个答案,只有 4f,让我的酒吧变得难以忍受模糊,几乎就像它上面有发光样式一样。
  • @beyondtheteal 呵呵,但实际上高度确实发生了变化,不是吗?所以我不明白你为什么投票否决答案。如果您需要一个高度缩放的栏,您可以创建自己的“CustomProgressBar”。
  • 请注意,如果你要在它上面画一些东西(例如圆圈),你会得到它的缩放版本(例如椭圆)
  • 简单的解决方案,不错。。也可以直接加-android:scaleY="3"
【解决方案2】:

android:scaleY="8" 在你的 xml 文件中

【讨论】:

    【解决方案3】:

    来自this tutorial

    <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" .它对我有用
    • 这里是 custom_progress_bar_horizo​​ntal drawable 的免费替代品:stackoverflow.com/questions/16893209/…
    【解决方案4】:

    使用这个

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

    【讨论】:

    • 您的答案与在 ProgressBar 上设置自定义高度有什么关系?
    • 这解决了这个问题。你能解释一下为什么会这样吗?
    • @Alfred 之所以有效,是因为风格不同。 Widget ProgressBar 的绘制部分会拉伸以适应整个 layout_height,而常规的 Android ProgressBar 则不会。
    • 这个解决方案有效!!以前我用的是?android:attr/progressBarStyleHorizontal,这不起作用
    【解决方案5】:

    正如其他答案中提到的,您似乎正在将进度条的样式设置为使用 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 倾角的示例输出:

    max/min 设置为 25 dip:

    max/min 设置为 100 dip:

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

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

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

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

    【讨论】:

      【解决方案6】:

      这里有很多赞成票的解决方案对我不起作用,即使是接受的答案。我通过设置 scaleY 解决了这个问题,但如果您需要太多高度,这不是一个好的解决方案,因为可绘制对象是像素化的。

      以编程方式:


      progressBar.setScaleY(2f);
      

      XML 布局:


      android:scaleY="2"
      

      【讨论】:

        【解决方案7】:

        您可以使用材质组件库提供的LinearProgressIndicatorapp:trackThickness属性:

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

        12dp:

        4dp:

        注意:至少需要1.3.0-alpha04版本。

        【讨论】:

          【解决方案8】:
          <ProgressBar  
          android:minHeight="20dip" 
          android:maxHeight="20dip"/>
          

          【讨论】:

          • 这不起作用! Piraba 的回答很容易实现,而且效果很好。
          • 不,这不控制水平进度条的高度。
          【解决方案9】:

          这是我用过的进度条。

          <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>
          

          【讨论】:

            【解决方案10】:

            值->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"
            

            【讨论】:

            • 很好的答案,但也更完整。
            • 对水平进度条没有影响。
            【解决方案11】:

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

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

            【讨论】:

              猜你喜欢
              • 2012-07-03
              • 1970-01-01
              • 1970-01-01
              • 2017-02-23
              • 1970-01-01
              • 2018-07-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多