约束布局切换视图相对于另一个视图的位置

时间:2018-11-16 15:46:39

标签: android android-constraintlayout

在此布局中,按钮最初位于textview的右侧。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.switchside.SwitchSideFragment">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="Hello"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

在运行时,将按钮放在textview左侧,并将其左侧连接到父级左侧的方法是更简单的方法?

1 个答案:

答案 0 :(得分:1)

如果我说对了,您想要实现的就是将按钮从一侧移到另一个textview。当然,您可以通过编程来实现此目的,只需更改已应用于按钮的约束即可。当然可以,但是与其他解决方案相比,该解决方案的可维护性较低。

我建议使用ConstraintSets。 ConstraintSets本质上是Constraints的一组规则。您已经在此布局文件中定义了一组约束。您可以复制此确切的布局文件,更改其名称,并应用不同的约束:您将拥有一组新的约束。请注意,您必须使用相同的ID才能使ConstraintSets起作用。这是强制性的。

创建第二个集合后,只需将所选集合应用于根ConstraintLayout,即可从一个集合切换到另一个集合。请查看官方文档中的完整示例:https://developer.android.com/reference/android/support/constraint/ConstraintSet

编辑: 我将添加一个示例。从第一个布局XML开始,我们将其称为R.layout.first,然后创建第二个布局XML,我们将其称为R.layout.second。

要以编程方式从第一切换到第二,您将执行以下操作:

ConstraintSet firstCS = new ConstraintSet(); //this will reference the first set
ConstraintSet secondCS = new ConstraintSet(); // this will reference the second set
ConstraintLayout constraintLayout = findViewByID(R.id.frameLayout); //this will reference the root constraint layout in your layout XML

firstCS.clone(constraintLayout); // you will get the first set directly from the root layout
secondCS.clone(getContext(), R.layout.second); //and you will clone the second set from your layout XML
secondCS.applyTo(constraintLayout); // this will apply the second set