TextInputLayout не відображає підказку EditText перед тим, як користувач зосередиться на ньому


96

Я використовую нещодавно випущену бібліотеку підтримки дизайну Android, щоб показати плаваючу мітку за допомогою EditTexts. Але я стикаюся з проблемою, що підказка в EditText не відображається, коли відображається UI, але я бачу підказку після того, як зосередився на 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методу using, 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());

У мене така ж проблема. На мій подив, запуск програми на емуляторі 4.1 працював чудово, але на моєму попередньому перегляді M Nexus TextInputLayout неправильно працював і не показував підказки для вбудованого EditText.
sashomasho

Чи можете ви перевірити свій колір підказки або спробувати змінити колір тла вигляду, можливо, вони там є, але ви не бачите через колір
Ultimo_m

@Ultimo_m, я думаю, колір натяку не повинен бути проблемою. Однак я спробую поглянути після зміни кольору тла.
Shajeel Afzal

1
@Shajeel Afzal Я кажу вам цю пропозицію, тому що у мене була така сама проблема, як і у вас, і коли я додав фон до подання, то побачив підказку. Я використовую його всередині фрагмента. Я не додав жодного коду з Java, все, що я зробив, це з xml
Ultimo_m

2
Я бачу цю проблему, коли додаю / видаляю фрагменти. Але якщо я показую / приховую фрагменти, я не бачу цієї проблеми.
Dave Jensen

Відповіді:


84

Оновлення:

Це помилка, виправлена ​​у версії 22.2.1 бібліотеки.

Оригінальна відповідь:

Як згадував @shkschneider, це відома помилка . Користувач Github @ ljubisa987 нещодавно опублікував суть для вирішення:

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

Як зазначалося в коментарях, обхідний шлях працює лише на Android Lollipop і старіших версіях. Це не працює на Android M Preview.


1
Ну Android MDC - це попередня версія.
Dave Jensen

1
До речі, схоже, статус помилки тепер "Майбутній випуск".
Dave Jensen,

2
Коментар №28 тут: code.google.com/p/android/issues/… працює для мене
J_Sizzle

1
Виправлено у версії 22.2.1.
Jdruwe

3
Ми впевнені, що це виправлено у V22.2.1? Я стикаюся з цією проблемою в бібліотеці дизайну v22.2.1, що працює на версії Android 5.1.1. У мене є два EditText на панелі інструментів, до якої я переходжу за діяльністю, і текст підказки не відображається, поки не сфокусовано.
StuStirling

13

Це відома помилка бібліотеки Android Design. Він прийнятий і призначений .

Отже, ви повинні це виправити в наступному випуску бібліотеки Android Design.

Тим часом ви могли спостерігати за тим, як відслідковувати проблеми, щоб знайти виправлення, яке може бути розміщене там, але я не знаю жодного на даний момент.

І так, це впливає лише на льодяник і вище.


1
Ця проблема виправлена ​​у версії 22.2.1
Сем

11

Це працює для мене в бібліотеці дизайну 23.1.1:

Встановіть колір підказки в атрибутах xml TextInputLayout:

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

властивість textColorHint також виправило це для мене.
JoM


5

ви повинні використовувати 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>

3
   <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 до останньої версії. дивіться вихід тут


3

Якщо ви встановлюєте підказку 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>

3

Ця проблема вирішена в v23.0.1бібліотеці дизайну підтримки. Я також оновив свою версію appcompat-v7to 23.0.1, compileSdkVersionto 23& buildToolsVersionto 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'
}

Чи потрібно змінювати compleSdkVersion, версію buildtools та appCompatVersion при зміні версії дизайну підтримки ??
srinivas

Це відбувається тому, що "бібліотеки підтримки" v23 вимагають API23 для компіляції проекту. Отже, головне співвідношення між "бібліотеками підтримки" та "compileSdkVersion". Ви завжди повинні відповідати 'compileSdkVersion', навіть якщо 'targetSdkVersion' або 'minSdkVersion' нижчі. Причина проста, версія бібліотеки відображає версію Android sdk проти її побудови.
Вахіб Уль Хак,

2

Я вирішив свою проблему за допомогою цього коду:

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.


0

Схоже, ця проблема з’являється, коли ви встановлюєте onFousListener у EditText - спробуйте розширити EditText і підтримувати кілька onFocusListeners



0

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


0

Проблема в кольорі підказки. Він стає білим, коли щось набираєш. Будь ласка, змініть колір підказки або колір фону. Під час набору тексту ви побачите підказку.


0

Існує просте рішення, оскільки це спрацювало для мене

<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, і він повинен працювати, і ви можете змінити тему, як вам потрібно.



0

Я знайшов щось інше.

При встановленні стилю для fragment,

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

Помилка зникла, коли я спробував різні стилі, ніж "Theme_DeviceDefault_Dialog".

Спробувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.