TextInputLayout не показывает подсказку EditText до того, как пользователь сосредоточится на ней

Я использую недавно выпущенную библиотеку поддержки дизайна Android. чтобы показать плавающую метку с EditTexts. Но я столкнулся с проблемой, что подсказка в EditText не отображается при отображении пользовательского интерфейса, но я вижу подсказку после того, как сосредоточусь на EditTexts.

Мой макет выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <ScrollView
        android:id="@+id/ScrollView01"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin">

            <android.support.design.widget.TextInputLayout
                android:id="@+id/name_et_textinputlayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/activity_vertical_margin">

                <EditText
                    android:id="@+id/FeedBackerNameET"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/feedbackname"
                    android:inputType="textPersonName|textCapWords" />
            </android.support.design.widget.TextInputLayout>

            <android.support.design.widget.TextInputLayout
                android:id="@+id/email_textinputlayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <EditText
                    android:id="@+id/FeedBackerEmailET"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/feedbackemail"
                    android:inputType="textEmailAddress" />

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

            <Spinner
                android:id="@+id/SpinnerFeedbackType"
                android:layout_width="fill_parent"
                android:layout_height="48dp"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:entries="@array/feedbacktypelist"
                android:prompt="@string/feedbacktype" />

            <android.support.design.widget.TextInputLayout
                android:id="@+id/body_textinputlayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <EditText
                    android:id="@+id/EditTextFeedbackBody"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/feedbackbody"
                    android:inputType="textMultiLine|textCapSentences"
                    android:lines="5" />

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

            <CheckBox
                android:id="@+id/CheckBoxFeedBackResponse"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:text="@string/feedbackresponse" />

            <Button
                android:id="@+id/ButtonSendFeedback"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/activity_vertical_margin"
                android:text="@string/feedbackbutton" />
        </LinearLayout>
    </ScrollView>

</FrameLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:background="@drawable/toolbar_shadow" />
</FrameLayout>

Я также пытался установить подсказку для TextInputLayout, используя метод setHint, но безуспешно.

mNameTextInputLayout = (TextInputLayout) v.findViewById(R.id.name_et_textinputlayout);
mNameTextInputLayout.setErrorEnabled(true);
mNameTextInputLayout.setHint(feedBackerNameET.getHint());

mEmailTextInputLayout = (TextInputLayout) v.findViewById(R.id.email_textinputlayout);
mEmailTextInputLayout.setErrorEnabled(true);
mEmailTextInputLayout.setHint(feedBackerEmail.getHint());

mBodyTextInputLayout = (TextInputLayout) v.findViewById(R.id.body_textinputlayout);
mBodyTextInputLayout.setErrorEnabled(true);
mBodyTextInputLayout.setHint(feedBackBody.getHint());

person Shajeel Afzal    schedule 29.05.2015    source источник
comment
У меня точно такая же проблема. К моему удивлению, запуск приложения на эмуляторе 4.1 работал нормально, но на моем предварительном просмотре M Nexus TextInputLayout работал неправильно и не показывал подсказку для встроенного EditText.   -  person sashomasho    schedule 30.05.2015
comment
Можете ли вы проверить цвет подсказки или попытаться изменить цвет фона вашего вида, может быть, они есть, но вы не можете видеть из-за цвета   -  person Ultimo_m    schedule 31.05.2015
comment
@Ultimo_m Я думаю, что цвет подсказки не должен быть проблемой. Однако я постараюсь посмотреть после изменения цвета фона.   -  person Shajeel Afzal    schedule 01.06.2015
comment
@Shajeel Afzal Я говорю вам это предложение, потому что у меня была та же проблема, что и у вас, и когда я добавил фон в представление, я увидел подсказку. Я использую его внутри фрагмента. Я не добавлял никакого кода из java, все, что я делал, это из xml   -  person Ultimo_m    schedule 01.06.2015
comment
Я вижу эту проблему, когда добавляю/удаляю фрагменты. Но если я показываю/скрываю фрагменты, я не вижу этой проблемы.   -  person Dave Jensen    schedule 02.06.2015
comment
Та же проблема с фрагментами. Если я использую транзакцию добавления, она работает хорошо, когда вы возвращаетесь. Если я использую транзакцию замены, когда вы возвращаетесь, вы не видите подсказки   -  person Ultimo_m    schedule 08.07.2015


Ответы (17)


Обновление:

Это ошибка, исправленная в версии 22.2.1 библиотеки.

Исходный ответ:

Как упомянул @shkschneider, это известная ошибка. Пользователь Github @ljubisa987 недавно опубликовал Gist для обходного пути:

https://gist.github.com/ljubisa987/e33cd5597da07172c55d

Как отмечено в комментариях, обходной путь работает только на Android Lollipop и более ранних версиях. Это не работает на Android M Preview.

person Dave Jensen    schedule 03.06.2015
comment
Что ж, Android MDC — это предварительная версия. - person Dave Jensen; 08.06.2015
comment
Кстати, похоже, что статус ошибки теперь Future Release. - person Dave Jensen; 13.06.2015
comment
Как только будет исправлена ​​​​ошибка, я обновлю ответ. :-) - person Dave Jensen; 19.06.2015
comment
Комментарий № 28 здесь: code.google.com/p/android/issues/ у меня работает - person J_Sizzle; 07.07.2015
comment
Исправлено в версии 22.2.1. - person Jdruwe; 18.07.2015
comment
Может ли кто-нибудь подтвердить, следует ли добавить подсказку в EditText или TextInputlayout? Оба имеют атрибут. - person milez; 25.07.2015
comment
Мы уверены, что это исправлено в V22.2.1? Я столкнулся с этой проблемой в библиотеке дизайна v22.2.1, работающей на Android версии 5.1.1. У меня есть два EditText на панели инструментов, к которым я перехожу, и текст подсказки не отображается, пока не будет сфокусирован. - person StuStirling; 17.08.2015
comment
Решение не работает на моем устройстве Samsung Lollipop. - person AndroidDev; 19.08.2015

Это известная ошибка библиотеки Android Design. Он был принят и назначен.

Поэтому вы должны исправить это в следующем выпуске библиотеки Android Design.

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

И да, это влияет только на Lollipop и выше.

person shkschneider    schedule 01.06.2015
comment
Эта проблема исправлена ​​в версии 22.2.1. - person Sam; 02.08.2015

Это работает для меня в библиотеке дизайна 23.1.1:

Установите цвет подсказки в атрибутах xml TextInputLayout:

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...
person Embydextrous    schedule 04.03.2016
comment
свойство textColorHint исправило это и для меня. - person JoM; 18.07.2016

Эта проблема исправлена ​​в версии 22.2.1.

person Jdruwe    schedule 18.07.2015

вы должны использовать android.support.v7.widget.AppCompatEditText как EditText и установить android:hint как показано ниже

<android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        <android.support.v7.widget.AppCompatEditText
                android:id="@+id/etx_first_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"                    
                android:inputType="text"
                android:hint="@string/hint_first_name"/>
    </android.support.design.widget.TextInputLayout>
person Ahmad    schedule 30.05.2015

   <android.support.design.widget.TextInputLayout
            android:id="@+id/editText1"
            android:layout_margin="15dp"
            android:layout_centerVertical="true"
            android:layout_width="match_parent"

            android:layout_height="wrap_content">

              <AutoCompleteTextView
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:singleLine="true"
                android:hint="Add City" />

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

Используйте этот фрагмент кода. Убедитесь, что ваша активность AppCompatActivity. И зависимость также с последними версиями

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'

Обновите студию Android до последней версии. см. вывод здесь

person Ajinkya    schedule 30.05.2015

Если вы устанавливаете подсказку EditText программно, это не сработает! Вам нужно установить подсказку в TextInputLayout самостоятельно.

TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.usernameTextInputLayout);
textInputLayout.setHint(getString(R.string.username_hint));

Вот XML, если вам интересно:

        <android.support.design.widget.TextInputLayout
            android:id="@+id/usernameTextInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/usernameEt"
                android:layout_width="match_parent"
                android:layout_height="@dimen/default_height"
                android:layout_marginEnd="@dimen/default_margin"
                android:layout_marginStart="@dimen/default_margin"
                android:maxLength="@integer/username"
                tools:hint="Username" />

        </android.support.design.widget.TextInputLayout>
person Muhammad Alfaifi    schedule 24.08.2015

Эта проблема решена в v23.0.1 библиотеки проектирования поддержки. Я также обновил свой appcompat-v7 до 23.0.1, compileSdkVersion до 23 и buildToolsVersion до 23.0.1 в build.gradle.

android {    
compileSdkVersion 23
buildToolsVersion "23.0.1"
}

dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
person Wahib Ul Haq    schedule 23.09.2015
comment
Нужно ли менять версию compleSdkVersion, buildtools и appCompatVersion, когда вы меняете версию дизайна поддержки? - person srinivas; 03.04.2016
comment
Это происходит потому, что «библиотеки поддержки» v23 требуют API23 для компиляции проекта. Таким образом, основное отношение находится между «библиотеками поддержки» и «compileSdkVersion». Вы всегда должны соответствовать «compileSdkVersion», даже если «targetSdkVersion» или «minSdkVersion» ниже. Причина проста, версия библиотеки отражает версию Android SDK, для которой она была собрана. - person Wahib Ul Haq; 03.04.2016

Я решил свою проблему с помощью этого кода:

new Handler().postDelayed(
        new Runnable() {
            @Override
            public void run() {
                TextInputLayout til = (TextInputLayout) someParentView.findViewById(R.id.til);
                til.setHint("Your Hint Text");
                til.bringToFront();
            }
        }, 10);

Ключ здесь bringToFront. Это заставляет TextInputLayout перерисовать свой рисунок, что не то же самое, что выполнение invalidate(). Если вы пытаетесь отобразить TextInputLayout на view, у которого есть animations или tranistions, вам нужно выполнить приведенный выше код в конце animation или transition. Просто убедитесь, что приведенный выше код работает в пользовательском интерфейсе thread.

person AndroidDev    schedule 19.08.2015

Установите цвет подсказки, контрастирующий с фоном EditText.

<item name="android:textColorHint">#FF424242</item>

Связано:
setHintTextColor() в EditText
Изменить цвет подсказки EditText при использовании TextInputLayout
Как изменить цвет плавающей метки TextInputLayout

person Ivan Chau    schedule 10.01.2016

Похоже, эта проблема возникает, когда вы устанавливаете onFousListener для EditText — попробуйте расширить EditText и поддерживать несколько onFocusListeners.

person nartus    schedule 15.07.2015

Проблема решена: перейдите к build.gradle вашего приложения и проверьте библиотеку дизайна. скомпилируйте 'com.android.support:design:22.2.1' Это должно быть 22.2.1 или новее.

person Abhishek    schedule 18.01.2016

Проблема в цвете подсказки. Он становится белым, когда что-то печатаешь. Пожалуйста, измените цвет подсказки или измените цвет фона. Вы увидите подсказку во время ввода.

person charitha amarasinghe    schedule 16.10.2017

Для этого есть простое решение, так как это сработало для меня

<android.support.design.widget.TextInputLayout
    android:id="@+id/activity_login_til_password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="27dp"
    android:layout_marginTop="24dp"
    android:padding="10dp"
    app:passwordToggleEnabled="true"
    app:passwordToggleTint="#000000"
    app:passwordToggleDrawable="@drawable/passwordviewtoggleselector"
    android:theme="@style/Base.TextAppearance.AppCompat">
      <!---- add this line and theme as you need ----->
    <android.support.design.widget.TextInputEditText
        android:id="@+id/activity_login_et_password"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:hint="Password"
        android:inputType="textPassword"
        android:padding="10dp"
        android:textColor="#f5ab3a"
        android:textColorHint="#e6d2d1cf"
        android:textSize="20dp" />

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

Просто добавьте android:theme="@style/Base.TextAppearance.AppCompat" в TextEditLayout, и он должен работать, и вы можете изменить тему по своему усмотрению.

person Manish Kumar Singh    schedule 27.05.2018

Просто добавьте: android:hint="your_hint" вместо TextInputLayout.

person Pratik Karale    schedule 28.08.2018

Я нашел кое-что другое.

При установке стиля для fragment,

f1.setStyle(DialogFragment.STYLE_NO_FRAME,android.R.style.Theme_DeviceDefault_Light);

Ошибка исчезла, когда я попробовал разные стили, кроме "Theme_DeviceDefault_Dialog".

Попробуйте.

person Jorge Cardenas    schedule 14.11.2016

если вы установили белый фон макета, используйте его в своей теме активности.

 parent="Theme.MaterialComponents.Light.NoActionBar"
person AndroidBrain    schedule 02.07.2021