删除水平进度条中的填充

在我们的应用程序中,我们需要一个不确定的进度条,如下所示:

进度条应该如何

我们可以通过在ProgressBar上设置负边距来实现这一点,如下所示:

<ProgressBar android:id="@+id/progressbar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="true" android:marginTop="-7dp" android:visibility="@{loading ? View.VISIBLE : View.GONE}" /> 

但是因为ConstraintLayout不支持负边距,所以看起来像这样:

进度栏与填充

好的,负边缘是一个黑客。 我们用一个不同的黑客代替它吧? 我们来介绍一下我们的自定义视图CustomProgressBar ,它扩展了ProgressBar并覆盖了它的onDraw方法,如下所示:

 @Override protected void onDraw(Canvas canvas) { int marginTop = dpToPx(7); canvas.translate(0, -marginTop); super.onDraw(canvas); } 

但是,所有这些闻起来都像糟糕的代码。 必须有更好的解决scheme! 你会推荐什么?

Solutions Collecting From Web of "删除水平进度条中的填充"

另一种方法是在父顶部和指南之间使用指南和中心ProgressBar。

 <ProgressBar android:id="@+id/progressBar2" style="?android:attr/progressBarStyleHorizontal" android:layout_width="0dp" android:paddingTop="-4dp" android:layout_height="wrap_content" app:layout_constraintRight_toRightOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintBottom_toTopOf="@+id/guideline" app:layout_constraintTop_toTopOf="parent" /> <android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline" android:orientation="horizontal" app:layout_constraintGuide_begin="4dp" /> 

我也遇到了同样的问题。 就像你说的,我遇到了无数的解决scheme,这些解决scheme看起来像是一种破解行为的黑客。 这样说,我遇到了一个解决scheme,即使用这个库,而不是进度条。

有一点要注意的是,它告诉你通过join来整合它:

 compile 'me.zhanghai.android.materialprogressbar:library:1.3.0' 

但是,当我使用这个,它给了我一个浮动操作栏的Android支持库的错误。 所以我build议你使用这个:

 compile 'me.zhanghai.android.materialprogressbar:library:1.1.7' 

我如何使用它的示例代码片段:

 <me.zhanghai.android.materialprogressbar.MaterialProgressBar android:id="@+id/reviewProgressBar" style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="6dp" android:layout_below="@+id/my_toolbar" android:indeterminate="false" app:mpb_progressStyle="horizontal" app:mpb_useIntrinsicPadding="false"/> 

希望这可以帮助!

感觉不像黑客攻击的解决scheme:在较小的FrameLayout包装巨大的ProgressBar 。 这样FrameLayout限制其高度,但ProgressBar仍然显示完整。

 <FrameLayout android:layout_width="match_parent" android:layout_height="4dp"> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="32dp" android:layout_gravity="center" /> </FrameLayout> 

我所做的一个肮脏的解决方法是将ProgressBar的高度紧密地设置为笔触宽度,如下所示:

进度条:

 <ProgressBar android:id="@+id/pb_loading_progress" style="@style/Widget.AppCompat.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="2.1dp" android:layout_below="@id/tb_browser" android:max="100" android:progressDrawable="@drawable/style_browser_progress_drawable" android:visibility="invisible" /> 

进度可绘制:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape android:shape="line"> <stroke android:width="2dp" android:color="@color/colorPrimary" /> </shape> </item> <item android:id="@android:id/progress"> <clip android:clipOrientation="horizontal" android:gravity="left"> <shape android:shape="line"> <stroke android:width="2dp" android:color="@color/white" /> </shape> </clip> </item> </layer-list> 

看起来像这样:

在这里输入图像说明