20

私たちのアプリケーションでは、次のような不確定な進行状況バーが必要です。

プログレスバーはどうあるべきか

これは、次のように、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 は負のマージンをサポートしていないため、次のようになります。

パディング付きの進行状況バー

OK、負のマージンはハックでした。別のハックに置き換えましょう。次のように、そのメソッドCustomProgressBarを拡張ProgressBarおよびオーバーライドするカスタム ビュー を紹介しましょう。onDraw

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

しかし、これはすべて悪いコードのようなにおいがします。もっと良い解決策があるはずです!あなたは何をお勧めします?

4

6 に答える 6

21

ハックのように感じられない解決策: 巨大なもの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>
于 2017-12-05T22:59:49.270 に答える
15

これを行う別の方法は、Guideline を使用して、親の上部とガイドラインの間に 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" />
于 2016-11-11T00:00:58.793 に答える