TextInputLayout 作为约束布局一部分的布局问题

Jos*_*lor 5 android android-layout android-studio

我在设计支持库的帮助下创建了一个文本输入,但它在我放置它的约束布局内表现得很奇怪。下面的代码是我希望显示小部件的方式,并且它最初在设计中都正确显示-生成器和设备上。但是,如果我选择TextInputLayout(在设计或蓝图布局中),它EditText就会被layout_width修改match_parent0dp导致它消失。

<android.support.design.widget.TextInputLayout
    android:id="@+id/textInputLayout"
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    app:layout_constraintLeft_toLeftOf="@+id/activity_login"
    android:layout_marginLeft="16dp"
    android:layout_marginStart="16dp"
    app:layout_constraintTop_toTopOf="@+id/activity_login"
    android:layout_marginTop="16dp"
    app:layout_constraintRight_toRightOf="@+id/activity_login"
    android:layout_marginRight="16dp"
    android:layout_marginEnd="16dp"
    app:layout_constraintBottom_toBottomOf="@+id/activity_login"
    android:layout_marginBottom="16dp">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/email"
        android:layout_weight="1"
        android:hint="@string/email"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="11dp"/>
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

EditText 改变后布局的状态

Jos*_*lor 3

我想我应该回来提供一个解决方案,因为这个问题仍然悬而未决。

我看到 EditText 视图在 TextInputLayout 中行为异常的原因是因为它们一开始就不应该在那里。TextInputLayout 是设计支持库的一部分,它为开发人员提供了一种简单的方法,以符合 Material 设计规范的方式为文本字段构建动态标签和错误消息。但是,它们有一个 TextInputEditText 作为子项,而不是 EditText。

<android.support.design.widget.TextInputLayout
    android:id="@+id/emailLayout"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:labelFor="@+id/email"
    app:layout_constraintLeft_toLeftOf="@+id/activity_login"
    android:layout_marginLeft="16dp"
    android:layout_marginStart="16dp"
    app:layout_constraintTop_toTopOf="@+id/activity_login"
    android:layout_marginTop="16dp"
    app:layout_constraintRight_toRightOf="@+id/activity_login"
    android:layout_marginRight="16dp"
    android:layout_marginEnd="16dp"
    app:layout_constraintBottom_toBottomOf="@+id/activity_login"
    android:layout_marginBottom="16dp">

    <android.support.design.widget.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/email"
        android:inputType="textEmailAddress"
        android:hint="@string/email"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="11dp"
        />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)