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());
16 93

16 ответов:

обновление:

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

Оригинальный Ответ:

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

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

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

Что это известная ошибка из библиотеки дизайна Android. Это было принят и назначен.

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

в то же время вы можете посмотреть трекер проблем для hacky-fix, который может быть размещен там, но я не знаю ни одного на данный момент.

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

это работает для меня в библиотеке проектирования 23.1.1:

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

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...

эта проблема исправлена в версии 22.2.1

вы должны использовать android.support.v7.widget.AppCompatEditText как EditText и set 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>
   <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 studio до последней версии. посмотреть вывода здесь

Если вы устанавливаете подсказку 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>

этот вопрос решается в v23.0.1 библиотеки дизайна поддержки. Я также обновил мой appcompat-v7 до 23.0.1,compileSdkVersion до 23 & buildToolsVersion до 23.0.1 на построить.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'
}

я решил свою проблему с этим кодом:

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. Просто убедитесь, что приведенный выше код работает на UI thread.

похоже, эта проблема возникает при установке onFousListener на EditText-попробуйте расширить EditText и поддерживать несколько onFocusListeners

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

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

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

проблема решена: Гото билд.gradle из приложения ur и проверьте библиотеку дизайна. компиляции в COM.андроид.поддержка:дизайн:22.2.1' Он должен быть 22.2.1 или новее.

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

при установке стиля для фрагмента,

f1.setStyle (DialogFragment.STYLE_NO_FRAME, android.Р. стиль.Theme_DeviceDefault_Light);

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

дайте ему попробовать.

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

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

<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.Совместимости приложений" к TextEditLayout и он должен работать, и вы можете изменить тему, как вам нужно.

просто добавить: android:hint="your_hint" на TextInputLayout.