在此布局中,按钮最初位于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
左侧,并将其左侧连接到父级左侧的方法是更简单的方法?
答案 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