TextInputLayout nie wyświetla wskazówki EditText, zanim użytkownik się na niej nie skupi


96

Korzystam z niedawno wydanej biblioteki obsługi projektów systemu Android, aby wyświetlić pływającą etykietę z EditTexts. Ale mam do czynienia z problemem polegającym na tym, że wskazówka dotycząca tekstu edycji nie jest wyświetlana, gdy renderowany jest interfejs użytkownika, ale widzę wskazówkę po tym, jak skupię się na tekstach edycji.

Mój układ wygląda następująco:

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

Próbowałem również ustawić wskazówkę dotyczącą TextInputLayoutmetody używania, setHintale bez powodzenia.

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

Mam ten sam problem. Ku mojemu zdziwieniu uruchomienie aplikacji na emulatorze 4.1 działało dobrze, ale na moim włączonym M Preview Nexus TextInputLayout źle się zachowywał i nie wyświetlał podpowiedzi dla osadzonego EditText.
sashomasho

Czy możesz sprawdzić kolor podpowiedzi lub spróbować zmienić kolor tła widoku, może one tam są, ale nie możesz ich zobaczyć ze względu na kolor
Ultimo_m

@Ultimo_m Myślę, że kolor podpowiedzi nie może być problemem. Postaram się jednak przyjrzeć po zmianie koloru tła.
Shajeel Afzal

1
@Shajeel Afzal Piszę Wam tę sugestię, ponieważ miałem ten sam problem co Ty, a kiedy dodałem tło do widoku, zobaczyłem podpowiedź. Używam go wewnątrz fragmentu. Nie
dodałem

2
Widzę ten problem podczas dodawania / usuwania fragmentów. Ale jeśli pokażę / ukryję fragmenty, nie widzę tego problemu.
Dave Jensen

Odpowiedzi:


84

Aktualizacja:

Jest to błąd, który został naprawiony w wersji 22.2.1 biblioteki.

Oryginalna odpowiedź:

Jak wspomniał @shkschneider, jest to znany błąd . Użytkownik Github @ ljubisa987 opublikował niedawno streszczenie opisujące obejście:

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

Jak zauważono w komentarzach, obejście działa tylko na Androidzie Lollipop i starszych. Nie działa na podglądzie Androida M.


1
Cóż, Android MDC to wersja zapoznawcza.
Dave Jensen

1
Przy okazji, wygląda na to, że status błędu to teraz „Przyszłe wydanie”.
Dave Jensen

2
Komentarz # 28 tutaj: code.google.com/p/android/issues/… działa dla mnie
J_Sizzle.

1
Naprawiono w wersji 22.2.1.
Jdruwe

3
Czy na pewno zostało to naprawione w wersji 22.2.1? Ten problem występuje w bibliotece projektów w wersji 22.2.1 działającej na systemie Android w wersji 5.1.1. Mam dwa EditText na pasku narzędzi, do którego przechodzę do działania, a tekst podpowiedzi nie jest wyświetlany, dopóki nie zostanie zaznaczony.
StuStirling

13

To znany błąd biblioteki Android Design. Został przyjęty i przydzielony .

Więc powinieneś to naprawić w następnej wersji biblioteki Android Design.

W międzyczasie możesz obejrzeć narzędzie do śledzenia problemów w poszukiwaniu hacky-poprawki, która może zostać tam opublikowana, ale na razie nic nie znam.

I tak, dotyczy to tylko Lollipopa i nowszych wersji.


1
Ten problem został rozwiązany w wersji 22.2.1
Sam

11

To działa dla mnie w Bibliotece projektu 23.1.1:

Ustaw kolor podpowiedzi w atrybutach xml TextInputLayout:

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

właściwość textColorHint również to naprawiła.
JoM


5

powinieneś używać android.support.v7.widget.AppCompatEditTextjako EditTexti ustawić android:hintjak poniżej

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

Użyj tego fragmentu kodu i upewnij się, że Twoja aktywność to AppCompatActivity. Zależności dotyczą również najnowszych wersji

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

Zaktualizuj Android Studio do najnowszej wersji. zobacz dane wyjściowe tutaj


3

Jeśli ustawiasz wskazówkę EditText programowo, to nie zadziała! Musisz ustawić wskazówkę w TextInputLayout.

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

Oto XML na wypadek, gdybyś się zastanawiał:

        <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

Ten problem został rozwiązany w v23.0.1bibliotece projektów wsparcia. Zaktualizowałem również moje opcjeappcompat-v7 do 23.0.1, compileSdkVersiondo 23i buildToolsVersiondo 23.0.1w pliku 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'
}

Czy konieczna jest zmiana compleSdkVersion, buildtools version i appCompatVersion podczas zmiany wersji projektu wsparcia?
srinivas

Dzieje się tak, ponieważ „biblioteki wsparcia” v23 wymagają API23 do skompilowania projektu. Zatem główna relacja zachodzi między „bibliotekami pomocniczymi” a „compileSdkVersion”. Zawsze należy dopasować wartość „compileSdkVersion”, nawet jeśli „targetSdkVersion” lub „minSdkVersion” jest niższa. Powód jest prosty, wersja biblioteki odzwierciedla wersję zestawu SDK systemu Android, w stosunku do której została zbudowana.
Wahib Ul Haq

2

Rozwiązałem swój problem z tym kodem:

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

Kluczem jest tutaj bringToFront. Zmusza to TextInputLayoutdo ponownego wykonania rysunku, co nie jest tym samym, co robienie invalidate(). Jeśli próbujesz wyświetlić element TextInputLayoutna, viewktóry ma animationslub tranistions, musisz wykonać powyższy kod na końcu animationlub transition. Upewnij się tylko, że powyższy kod działa w interfejsie użytkownika thread.


0

Wygląda na to, że ten problem pojawia się po ustawieniu onFousListener w EditText - spróbuj rozszerzyć EditText i obsługiwać wiele onFocusListeners



0

Rozwiązany problem: przejdź do build.gradle swojej aplikacji i sprawdź bibliotekę projektów. compile „com.android.support:design:22.2.1” Powinien być 22.2.1 lub nowszy.


0

Problemem jest kolor podpowiedzi. Podczas pisania staje się biały. Zmień kolor podpowiedzi lub zmień kolor tła. Podczas pisania zobaczysz podpowiedź.


0

Jest na to proste rozwiązanie, ponieważ to zadziałało

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

Po prostu dodaj android: theme = "@ style / Base.TextAppearance.AppCompat" do TextEditLayout i powinno działać i możesz zmienić motyw według potrzeb.



0

Znalazłem coś innego.

Ustalając styl dla fragment,

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

Błąd zniknął, gdy wypróbowałem inne style niż "Theme_DeviceDefault_Dialog".

Spróbuj.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.