java - 删除水平进度条中的填充

标签 java android android-studio layout android-constraintlayout

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

progress bar how it should be

我们可以通过在 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 不支持负边距,所以它看起来像这样:

progress bar with padding

好吧,负边距是一个黑客。让我们用不同的 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/

相关文章:

Android 应用程序链接在 android 12 中不起作用总是在浏览器中打开

android - CN1 连接 - 公共(public)场所互联网不稳定的担忧

Android 签名 Apk 在 5.0 以下版本中崩溃

java - 获取 Lotus Domino 文档的创建者和最后修改者

java - 列出文件夹和子文件夹的文件路径

android - 如何将按钮放在 Activity 标题中?

Android Studio+实验性Gradle插件+NDK+OpenCV :showing error at opencv include statement

android-studio - Android Studio 2.0 即时运行不工作

java - 将 Ucanaccess 与 msaccess 结合使用时出现问题

java - 从Java读取数据并在Flex中显示