删除水平进度条中的填充

mre*_*elt 15 java layout android android-studio android-constraintlayout

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

进度条应该如何

我们可以通过在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}" />
Run Code Online (Sandbox Code Playgroud)

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

带填充的进度条

好吧,负利润是一个黑客.让我们换一个不同的黑客,好吗?让我们来介绍我们的自定义视图CustomProgressBar,它扩展ProgressBar并覆盖其onDraw方法,如下所示:

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

但所有这些都闻起来像坏代码.必须有一个更好的解决方案!你会推荐什么?

010*_*101 16

感觉不像黑客的解决方案:将一个巨大的包裹ProgressBar在更小的范围内FrameLayout.这样就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>
Run Code Online (Sandbox Code Playgroud)

  • 太糟糕了,我们需要为这么简单的事情做这件事。 (3认同)

hof*_*ord 10

另一种方法是在父顶部和指南之间使用指南和中心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" />
Run Code Online (Sandbox Code Playgroud)