我有以下简化的XML布局,其中包含一个约束布局、两个文本视图和一个开关:
<?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">
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Demo"
app:layout_constraintEnd_toStartOf="@id/innerConstraintLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@id/textView1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/textView1" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/textView1"
app:layout_constraintTop_toBottomOf="@id/switch1" />
</androidx.constraintlayout.widget.ConstraintLayout>
对于switch1
,我必须使用layout_constraintTop_toTopOf
和layout_constraintBottom_toBottomOf
,使其与textView1
水平居中。否则switch1
会太大。
如果switch1
可见,则textView2
应在switch1
下方可见,否则与textView1
的顶部对齐。
我该怎么做呢?
当前,如果switch1
可见,则textView2
在switch1
下方可见,否则与textView1
的底部对齐。
谢谢!
3条答案
按热度按时间k10s72fa1#
您正在使用开关的顶部和底部约束使其在左侧 TextView 居中。开关可见时,底部 TextView 与其底部对齐。开关为
gone
时,您希望底部 TextView 与左侧 TextView 的顶部对齐。(该开关实际上扩展到左侧 TextView 的下方和上方但是由于其位于左视图的中心而看起来收缩。当开关可见时,位于开关下方的 Barrier(底部 TextView 的顶部连接到它)将为您提供所需的内容。但是当开关为
gone
时会发生什么情况?当开关设置为
gone
时,它实际上“收缩为一个点”。由于开关的顶部和底部仍然连接到左侧 TextView 的顶部和底部,因此该点将位于左侧 TextView 的顶部和底部之间的中心。这不是您想要的,因为您希望底部视图与左侧视图的顶部对齐。解决这个问题的方法是在左侧 TextView 的顶部设置一个宽度/高度为零的小部件。Space小部件是最合适的。
现在我们可以在 Space 和开关的底部设置一个屏障。我们还需要指定当开关为
gone
时,Barrier 将忽略开关,方法是指定这是最终的布局图。我为这个演示做了一些调整。
我不记得我提到的一些功能是什么时候引入的。您可能需要移动到更高版本的 ConstraintLayout 才能使其工作。
daolsyd02#
在这种情况下,您需要使用
Barrier
。请尝试以下代码。iq0todco3#
您只需使switch 1可见性在类中消失,而不是使其不可见
并且文本视图2将跳转并取代其在文本视图1之后的位置
希望这有帮助!!