相关疑难解决方法(0)

ConstraintLayout:如何将视图居中并保持在父边界内?

我想将一个视图放在另一个像电子邮件下的“退出”按钮下:

居中视图

我通过使用 aConstraintLayout作为父级并将底部视图的左右边缘限制到顶部视图的左右边缘来做到这一点。这正确地使两个视图居中。(请注意,我并不想中心父的意见。)

我遇到的问题是,如果顶视图很窄,底视图最终会被父视图在右侧截断,如下所示(来自布局编辑器):

位置不佳的视图

我事先不知道在运行时顶视图会有多窄。(它不一定是电子邮件地址,即使是,我也认识一个电子邮件地址只有 8 个字符的人!)

我想设置约束,以便底视图在顶视图下方居中,但如果它向右太远,它会向左移动,以避免越过指南。顶视图的右边缘需要保持固定。我怎样才能达到这种效果?(ConstraintLayout如果有另一种更好的方法,我不会坚持使用 a 。)

这是我正在使用的实际布局文件:

<?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>
Run Code Online (Sandbox Code Playgroud)

android android-layout android-constraintlayout

5
推荐指数
1
解决办法
7108
查看次数