【问题标题】:Why marginBottom isn't working in Spinner?为什么 marginBottom 在 Spinner 中不起作用?
【发布时间】:2021-02-16 18:24:58
【问题描述】:

有人能解释一下为什么android:layout_marginBottom 在 Spinner 中不起作用吗?:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginBottom="20dp"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/spinner2" />
</androidx.constraintlayout.widget.ConstraintLayout>

我使用android:layout_marginBottomandroid:layout_margin 都没有关系。但是,如果我使用 android:layout_margin 它会添加顶部、右侧和左侧边距。为什么唯一不起作用的边距是底部?

谢谢。

【问题讨论】:

标签: android spinner android-spinner margins


【解决方案1】:

问题不在于Spinner,如果你使用两个TextViews,行为保持不变。

关于“为什么”和“如何”的一些观察:

  • Spinner top 和 start 被限制为父 ViewGroup 的 top 和 start。由于您没有指定底部(或结束)约束,因此底部边距是没有意义的

  • 另一方面,TextView 有一个顶部约束 - 如果你让它有一个顶部边距,这将产生预期的效果。

现在您可以说“好吧,那么我只需将底部约束添加到Spinner”。不幸的是,这还不够(我真的不知道为什么ConstraintLayout 求解器决定忽略边距......)

如果要给Spinner设置边距,那么这两个View必须属于一个完整的垂直链:

父顶部 TextView -> 父底部

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        android:layout_marginBottom="20dp"
        app:layout_constraintVertical_bias="0"
        app:layout_constraintVertical_chainStyle="packed"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/spinner2"
        app:layout_constraintBottom_toBottomOf="parent"
       />
</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

    【解决方案2】:

    将约束从按钮连接到视图或父级,然后它将影响 $app:layout_constraintBottom_toBottomOf="" `

    【讨论】:

      【解决方案3】:

      您需要将微调器限制在底部:

      第一种方法: app:layout_constraintBottom_toBottomOf="parent"

      第二种方法: 通过将微调器拖动到根视图的底部,将其约束到底部

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-31
        相关资源
        最近更新 更多