在我们的应用程序中,我们需要一个不确定的进度条,如下所示:
我们可以通过在 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 不支持负边距,所以它看起来像这样:
好吧,负边距是一个黑客。让我们用不同的 hack 替换它,好吗?让我们介绍一下我们的自定义 View CustomProgressBar
,它扩展了 ProgressBar
并覆盖了它的 onDraw
方法,如下所示:
@Override
protected void onDraw(Canvas canvas) {
int marginTop = dpToPx(7);
canvas.translate(0, -marginTop);
super.onDraw(canvas);
}
但是所有这些闻起来都像是糟糕的代码。必须有更好的解决方案! 你会推荐什么?
最佳答案
感觉不像 hack 的解决方案:将巨大的 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>
关于java - 删除水平进度条中的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40531394/