TextInputLayout 中的 EditText 在顶部留空 space

EditText inside TextInputLayout leaves empty space at the top

我有密码字段,我想实现 hide/show 密码功能。所以我使用了 TextInputLayout。但是,如果我在 TextInputLayout 中使用 EditText,它会在布局顶部留空 space。而且我需要将该密码字段的高度变小。有了那个差距,这是不可能的。 我试图将 EditText 的高度设置为负值,但它没有用。 android:layout_height="45dp" 用于缩小该字段,但它根本不起作用。 wrap_content 让它变得更高。

    <android.support.design.widget.TextInputLayout
            android:id="@+id/textInputLayout"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_marginEnd="45dp"
            android:layout_marginStart="42dp"
            app:passwordToggleDrawable="@drawable/login_password_eye"
            app:passwordToggleEnabled="true">

            <EditText
                android:id="@+id/passwordTextField"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:backgroundTint="@color/colorDivider"
                android:imeOptions="actionDone"
                android:inputType="textPassword"
                android:singleLine="true"
                android:textColor="@color/colorItemMajor"
                android:textSize="16sp" />

     </android.support.design.widget.TextInputLayout>

图片:

XML 代码 - 完整(我不得不删除颜色和图像 + 顶部工具栏,但逻辑相同)

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/mainLoginLayout"
    android:orientation="vertical"
    android:clickable="true"
    android:focusableInTouchMode="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/loginLayout"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/imageLogin"
            android:layout_width="210dp"
            android:layout_height="210dp"
            android:layout_gravity="center"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/emailLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="E-mail"
            android:textColor="@color/colorBlack"
            android:textSize="16sp"
            android:layout_marginStart="45dp"
            android:layout_marginEnd="45dp"
            />

        <EditText
            android:id="@+id/emailTextField"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="45dp"
            android:layout_marginStart="45dp"
            android:backgroundTint="@color/colorBlack"
            android:inputType="textEmailAddress"
            android:textColor="@color/colorBlack"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/passwordLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Password"
            android:textColor="@color/colorBlack"
            android:textSize="16sp"
            android:layout_marginStart="45dp"
            android:layout_marginEnd="45dp"
            />

        <android.support.design.widget.TextInputLayout
            android:id="@+id/textInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/login_password_padding"
            android:layout_marginStart="@dimen/login_password_field_padding"
            app:passwordToggleDrawable="@drawable/login_password_eye"
            app:passwordToggleEnabled="true"
            app:passwordToggleTint="@android:color/black">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/passwordTextField"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="0dp"
                android:backgroundTint="@color/colorDivider"
                android:imeOptions="actionDone"
                android:inputType="textPassword"
                android:singleLine="true"
                android:textColor="@color/colorItemMajor"
                android:textSize="@dimen/login_password_label_textsize" />

        </android.support.design.widget.TextInputLayout>

        <LinearLayout
            android:id="@+id/default_login_button"
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:gravity="center"
            android:clickable="true"
            android:focusable="true"
            android:layout_height="55dp"
            android:layout_marginStart="45dp"
            android:layout_marginEnd="45dp"
            android:layout_marginTop="45dp"
            android:background="@color/colorBlack">

            <ImageView
                android:id="@+id/loginButtonIcon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center|center_horizontal"
                android:src="@mipmap/ic_launcher" />

            <TextView
                android:id="@+id/LoginButtonLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center|center_horizontal"
                android:text="Login"
                android:textAppearance="@style/FilledLoginButtonTextAppearance" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

因为您已经完成了 TextInputLayout 的修复

 android:layout_height="45dp"

请改为wrap_content

使用TextInputEditText代替EditText

A special sub-class of EditText designed for use as a child of TextInputLayout.

Using this class allows us to display a hint in the IME when in 'extract' mode.

我认为你必须使用 android.support.design.widget.TextInputEditText 而不是 EditText

<android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_marginEnd="45dp"
        android:layout_marginStart="42dp"
        app:passwordToggleDrawable="@drawable/login_password_eye"
        app:passwordToggleEnabled="true">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/passwordTextField"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/colorDivider"
            android:imeOptions="actionDone"
            android:inputType="textPassword"
            android:singleLine="true"
            android:textColor="@color/colorItemMajor"
            android:textSize="16sp" />

 </android.support.design.widget.TextInputLayout>

这是与您的问题相关的我的代码,它在项目中正常工作。用你自己的方式试试这个 别忘了评论。

       <android.support.design.widget.TextInputLayout
            android:id="@+id/input_Layout_Signup_Password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/input_Layout_Signup_Phone"
            app:passwordToggleEnabled="true"
            app:passwordToggleTint="@color/colorAccent"
            android:layout_margin="5dp">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/input_Signup_Password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Password"
                android:layout_marginRight="10dp"
                android:inputType="textPassword"
                android:singleLine="true" />
        </android.support.design.widget.TextInputLayout>

I think you see this on layout preview . compile it try to run then you see its working gud. this gap is because you use floating edit text. – Harwinder Singh

这成功了!

向 TextInputLayout 添加底部填充

android:paddingBottom="11dp"