TextInputLayout中的EditText在顶部留下空白空间

时间:2018-06-07 11:45:52

标签: android android-layout android-edittext android-textinputlayout

我有密码字段,我想实现隐藏/显示密码功能。所以我使用了TextInputLayout。但是如果我在TextInputLayout中使用EditText,它会在布局的顶部留下空白空间。我需要让密码字段的高度更小。由于存在这种差距,这是不可能的。 我试图将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>

图像:

enter image description here

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>

6 个答案:

答案 0 :(得分:2)

使用TextInputEditText代替EditText

  

EditText的一个特殊子类,旨在用作TextInputLayout的子级。

     

使用此类允许我们在进入时在IME中显示提示   '提取'模式。

答案 1 :(得分:1)

我认为您必须使用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>

答案 2 :(得分:1)

  

我认为您在布局预览中看到了这一点。编译它尝试运行然后   你看到它的工作gud。这个差距是因为你使用浮动编辑   文本。 - Harwinder Singh

这很有用!

答案 3 :(得分:0)

这是我的代码,与您的问题及其在项目中的正常工作有关。以自己的方式尝试 并且不要忘记发表评论。

       <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>

答案 4 :(得分:0)

将底部填充添加到TextInputLayout

Stream fs = img.ImageFile.PostedFile.InputStream;

BinaryReader br = new BinaryReader(fs);

byte[] bytes = br.ReadBytes((Int32)fs.Length);

答案 5 :(得分:-1)

因为你已经用

修复了TextInputLayout
 android:layout_height="45dp"

请更改为wrap_content