从水平进度条中移除垂直填充

144

默认情况下,ProgressBar 在其本身上下有一定的填充。是否有一种方法可以去除这个填充,只保留最终的进度条?


7
如其他主题所述,设置 maxHeight 无效。 - abergmeier
1
android:minHeight="4dp" - Sam Chen
28个回答

7

如果有人仍在寻找解决方案 - 请查看此评论

将最小高度设置为4 dp

   android:minHeight="4dp"

-

  <ProgressBar
    android:id="@+id/web_view_progress_bar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="false"
    android:max="100"
    android:min="0"
    android:progress="5"
    android:minHeight="4dp"
    android:progressTint="@color/vodafone_red"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:progress="60" />

我更喜欢这个答案。 - Sam Chen

5

Subin的答案似乎是目前唯一一个不会在未来Android ProgressBar版本更新中易碎的hack。

但是,我选择使用MaterialProgressBar库,而不是费心去打破资源、修改它们并持续维护它们:

<me.zhanghai.android.materialprogressbar.MaterialProgressBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    android:layout_gravity="bottom"
    custom:mpb_progressStyle="horizontal"
    custom:mpb_showTrack="false"
    custom:mpb_useIntrinsicPadding="false"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
/>

在 build.gradle 文件中:
// Android horizontal ProgressBar doesn't allow removal of top/bottom padding
compile 'me.zhanghai.android.materialprogressbar:library:1.1.6'

该项目有一个漂亮的演示,展示了它与内置ProgressBar之间的区别。 (链接)

2

请尝试以下方法:

<ProgressBar
    android:id="@+id/progress_bar"
    style="@android:style/Widget.ProgressBar.Horizontal"
    android:progress="25"
    android:progressTint="@color/colorWhite"
    android:progressBackgroundTint="@color/colorPrimaryLight"
    android:layout_width="match_parent"
    android:layout_height="4dp" />

然后根据您的需求配置进度条,因为它最初会显示一个黄色进度色调的中等大小条形带有灰色进度背景色调。另外,请注意没有垂直填充。


2

我使用minHeight和maxHeight。这有助于不同Api版本的使用。

<ProgressBar
    android:id="@+id/progress_bar"
    style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxHeight="3dp"
    android:minHeight="3dp" />

需要同时使用 Api 23。它与……很好地配合使用。

android:layout_height="wrap_content"
android:minHeight="0dp"

但是较低的API版本会将进度条高度增加到最大高度。


2

对我来说这很好用。进度条很清晰,而且非常贴合。我已经尝试过不同高度的框架和进度。

<FrameLayout             
    android:layout_width="match_parent"             
    android:layout_height="4dp">    

   <ProgressBar
       style="?android:attr/progressBarStyleHorizontal"
       android:layout_width="match_parent"
       android:layout_height="16dp"
       android:layout_gravity="center"
       android:indeterminate="true"/>
</FrameLayout>

preview


2

在 LinearLayout 中使用如下:

 <LinearLayout
     android:layout_width="match_parent"
     android:background="#efefef"
     android:layout_height="wrap_content">

     <ProgressBar
         android:id="@+id/progressBar"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:indeterminate="true"
         android:visibility="gone"
         android:layout_marginTop="-7dp"
         android:layout_marginBottom="-7dp"
         style="@style/Widget.AppCompat.ProgressBar.Horizontal" />
 </LinearLayout>

非常好!下次请描述一下你的代码是做什么的,以及你做了哪些更改。;-) - DFJ

1

不需要下载任何新模块,甚至不需要在进度条周围放置FrameLayout。这些都只是hack。只需两步:

在你的whatever.xml中

<ProgressBar
    android:id="@+id/workoutSessionGlobalProgress"
    android:layout_width="match_parent"
    android:layout_height="YOUR_HEIGHT"
    android:progressDrawable="@drawable/progress_horizontal"
    android:progress="0"
    <!-- High value to make ValueAnimator smoother -->
    android:max="DURATION * 1000"
    android:indeterminate="false"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"/>

progress_horizontal.xml,根据您的喜好更改值。

不喜欢圆角?
删除角度半径

不喜欢颜色?更改颜色等。完成!

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#ff9d9e9d"
                    android:centerColor="#ff5a5d5a"
                    android:centerY="0.75"
                    android:endColor="#ff747674"
                    android:angle="270"
                    />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#80ffd300"
                        android:centerColor="#80ffb600"
                        android:centerY="0.75"
                        android:endColor="#a0ffcb00"
                        android:angle="270"
                        />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#ffffd300"
                        android:centerColor="#ffffb600"
                        android:centerY="0.75"
                        android:endColor="#ffffcb00"
                        android:angle="270"
                        />
            </shape>
        </clip>
    </item>

</layer-list>

通常,更改任何您不喜欢的内容的代码需要遵循以下步骤。只需找到源代码并弄清楚要更改的内容。如果您遵循ProgressBar源代码,您将找到一个名为progress_horizontal.xml的文件。基本上这就是我解决所有XML问题的方法。

1
将android:progressDrawable添加到在drawable中定义的layer-list中,对我来说解决了这个问题。它通过在自定义可绘制对象中遮罩进度条来实现。
示例实现在https://dev59.com/FnE85IYBdhLWcg3wXCIv#4454450中描述。

1
我正在使用style="@style/Widget.AppCompat.ProgressBar.Horizontal",并且很容易去掉边距。该样式为:
    <item name="progressDrawable">@drawable/progress_horizontal_material</item>
    <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_material</item>
    <item name="minHeight">16dip</item>
    <item name="maxHeight">16dip</item>

我刚刚覆盖了最小/最大高度:

    <ProgressBar
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:indeterminate="true"
        android:minHeight="2dp"
        android:maxHeight="2dp" />

我从来没有对通用进度条感到满意,最终转向了一个库:me.zhanghai.android.materialprogressbar.MaterialProgressBar - Anthony

1

只需使用没有隐藏边距的Material ProgressIndicator。

<com.google.android.material.progressindicator.ProgressIndicator
        android:id="@+id/progressBar"
        style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:indicatorColor="@color/colorPrimary"
        app:trackColor="@color/colorAccent" />

进度指示器将被弃用 https://github.com/material-components/material-components-android/blob/master/docs/components/ProgressIndicator.md - Anwar SE
1
你可以使用 'com.google.android.material.progressindicator.LinearProgressIndicator' 这个工具来进行编程。 - Abdur Rehman

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