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