EditText внутри TextInputLayout оставляет пустое место вверху

У меня есть поле пароля, и я хотел реализовать функцию скрытия / отображения пароля. Поэтому я использовал TextInputLayout. Но если я использую EditText внутри TextInputLayout, он оставляет пустое место в верхней части макета. И мне нужно, чтобы высота этого поля пароля была меньше. С этим разрывом это невозможно. Я пытался установить отрицательное значение высоты для 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>

Изображение:

EditText внутри 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>
2
0
1 350
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Потому что вы сделали TextInputLayout, чтобы исправить с помощью

 android:layout_height = "45dp"

Пожалуйста, измените на wrap_content

Я сделал это намеренно, чтобы уменьшить фактическую высоту, потому что wrap_content делает ее выше. Но поскольку я использовал wrap_content, пробел все еще существует + он не решит мою проблему с пробелами

martin1337 07.06.2018 13:54

Используйте 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:layout_marginTop = "0dp" в свой EditText.

Nicolas 07.06.2018 13:54

Это мой код, связанный с вашей проблемой и его правильной работой в проекте. попробуй это по-своему и не забывайте комментировать.

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

эй, отправьте весь свой xml файл, тогда я увижу и дам вам решение

Harwinder Singh 07.06.2018 14:51

отправьте мне фото вашего макета xml-код, напишите, возможно, после того, как увидите ваш xml. я дам вам решение

Harwinder Singh 07.06.2018 14:58

Думаю, вы видите это при предварительном просмотре макета. скомпилируйте его, попробуйте запустить, тогда вы увидите его рабочий гуд. этот пробел вызван тем, что вы используете плавающий текст редактирования.

Harwinder Singh 07.06.2018 15:12

Если у вас есть решение, пожалуйста, дайте чек и проголосуйте, если можете

Harwinder Singh 08.06.2018 09:03
Ответ принят как подходящий

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"

Другие вопросы по теме