【发布时间】:2017-07-27 03:27:50
【问题描述】:
我想在电子邮件下方的另一个类似“退出”按钮下的视图居中:
我通过使用ConstraintLayout 作为父级并将底部视图的左右边缘约束到顶部视图的左右边缘来做到这一点。这正确地将两个视图居中。 (请注意,我不想将视图居中放置在父视图中。)
我遇到的问题是,如果顶视图很窄,底视图可能会在右侧被父级截断,如下所示(来自布局编辑器):
我事先不知道运行时顶视图会有多窄。 (不一定是电子邮件地址,即使是,我知道有人的电子邮件地址只有 8 个字符!)
我想设置约束,使底视图在顶视图下方居中,但如果它最终向右太远,它会向左移动,刚好足以避免越界。顶视图的右边缘需要保持固定。我怎样才能达到这个效果? (如果有其他更好的方法,我不喜欢使用ConstraintLayout。)
这是我正在使用的实际布局文件:
<?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:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginTop="10dp"
android:text="user"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:layout_constraintRight_creator="1"
tools:layout_constraintTop_creator="1"/>
<View
android:id="@+id/scrim"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/transparent"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintTop_creator="1"
tools:visibility="visible"/>
<Button
android:id="@+id/sign_out"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@android:drawable/dialog_holo_light_frame"
android:text="@string/sign_out"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/user_name"
tools:visibility="visible"/>
</android.support.constraint.ConstraintLayout>
【问题讨论】:
-
@Enzokie - 不幸的是,这将允许顶视图的后沿向左移动。我目前的选择是消除底视图开始和顶视图开始之间的约束。这牺牲了居中(这是一个问题),但解决了截断问题(这是一个更大的问题)。不完全令人满意,但如果必须,我可以忍受。
-
如果只有
app:layout_constraintHorizontal_bias_MAX="1.0"这样的东西应该会更容易。 -
这个code 在shorter text 工作,当text is longer 与按钮比较时,它将按钮居中。
-
@Enzokie - 是的,这行得通。和下面的Ben P.'s answer基本一样。
标签: android android-layout android-constraintlayout