我有一个ConstraintLayout
形式,例如:
“全名”和“密码”在其右边缘对齐,“全名”提供了ConstraintLayout
的边距:
到目前为止,一切都很好,但是我想知道如何正确处理需要以编程方式更改这些文本的情况。如果“全名”变大或变小,则“密码”将保持对齐:
但是,如果“密码”更改其大小,它将退出屏幕:
我尝试使用Barrier
来获取“全名”和“密码”的左边缘,但是我无法使其正常工作,我认为Barrier
只能与与其他元素对齐,而不是将障碍的元素与边缘对齐(如果我错了,请纠正我)。
这种情况对我来说尤其重要,避免对几种语言进行不同的布局,以免“全名”和“密码”的翻译可能会改变其大小并使文本不显示在屏幕上。
因此,如何避免“全名”和“密码”的文字出现变化,并且EditText
扩展到其右边缘(如图所示)?
答案 0 :(得分:3)
这是ConstraintLayout
的有趣测试。以下布局可在1.1.2和1.1.3版本下使用,但未在其他版本中进行测试。
关键是将全名和密码字段的结尾彼此限制,并将它们的开头约束为父对象的开头。将水平偏差设置为1.0
,以使两个字段右对齐。
我想知道循环引用(结束<->结束)是否可以成功解析,并且确实可以。我现在想知道这种解决方案是否可以正常工作,但是在将来的版本中可能会失效。
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/fullName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="50dp"
android:text="Full Name"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintEnd_toEndOf="@+id/password"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:text="Password is longer"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintEnd_toEndOf="@id/fullName"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fullName" />
<View
android:id="@+id/view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@android:color/holo_blue_light"
app:layout_constraintBottom_toBottomOf="@id/fullName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/fullName"
app:layout_constraintTop_toTopOf="@id/fullName" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@android:color/holo_blue_light"
app:layout_constraintBottom_toBottomOf="@id/password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/password"
app:layout_constraintTop_toTopOf="@id/password" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是第二种方法,它也使用循环引用。在文本字段的右侧放置一个障碍,这些字段的末端与该障碍绑定在一起。 1.0
的水平偏差使文本对齐。屏幕快照与上面的快照相同,因此在此不再赘述。
我认为这种方法更可取,恕我直言,不易破解。
activity_main2.xml
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/fullName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="50dp"
android:text="Full Name"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintEnd_toEndOf="@+id/barrier"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:text="Password is longer"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintEnd_toStartOf="@id/barrier"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fullName" />
<View
android:id="@+id/view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@android:color/holo_blue_light"
app:layout_constraintBottom_toBottomOf="@id/fullName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/barrier"
app:layout_constraintTop_toTopOf="@id/fullName" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@android:color/holo_blue_light"
app:layout_constraintBottom_toBottomOf="@id/password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/barrier"
app:layout_constraintTop_toTopOf="@id/password" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="right"
app:constraint_referenced_ids="fullName,password" />
</androidx.constraintlayout.widget.ConstraintLayout>
答案 1 :(得分:1)
E:\neo4jDatabases\database-6c03e895-692f-4f45-90e4-dc29e0f5bfeb\
installation-3.4.1\data\databases\graph2.db
比TableLayout
更好,在您的情况下,布局可能是这样的:
ConstraintLayout
当您更改两个<TableLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="24dp"
android:stretchColumns="1">
<TableRow>
<TextView android:gravity="end"
android:text="Full Name"/>
<EditText/>
</TableRow>
<TableRow>
<TextView android:gravity="end"
android:text="Password"/>
<EditText/>
</TableRow>
</TableLayout>
之一时,它们将再次自动对齐。