TextInputLayout non mostra il suggerimento EditText prima che l'utente lo attivi


96

Sto usando la libreria di supporto alla progettazione Android rilasciata di recente per mostrare l'etichetta mobile con EditTexts. Ma sto affrontando il problema che il suggerimento su EditText non viene visualizzato quando viene eseguito il rendering dell'interfaccia utente, ma vedo il suggerimento dopo che mi concentro sugli EditTexts.

Il mio layout è il seguente:

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

Ho anche provato a impostare un suggerimento per il TextInputLayoutmetodo di utilizzo setHintma senza fortuna.

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

Ho lo stesso problema. Con mia sorpresa, l'esecuzione dell'applicazione sull'emulatore 4.1 ha funzionato bene, ma sulla mia anteprima M abilitata Nexus TextInputLayout si comportava in modo anomalo e non mostrava il suggerimento per l'EditText incorporato.
sashomasho

Puoi controllare il colore del suggerimento o provare a cambiare il colore di sfondo della visualizzazione, forse sono lì ma non puoi vedere a causa del colore
Ultimo_m

@Ultimo_m penso che il colore del suggerimento non debba essere un problema. Tuttavia cercherò di dare un'occhiata dopo aver cambiato il colore di sfondo.
Shajeel Afzal

1
@Shajeel Afzal ti sto dicendo questo suggerimento perché ho avuto il tuo stesso problema e quando ho aggiunto lo sfondo alla vista ho visto il suggerimento. Lo sto usando all'interno di un frammento. Non ho aggiunto alcun codice da java, tutto ciò che ho fatto è da xml
Ultimo_m

2
Visualizzo questo problema quando aggiungo / rimuovo frammenti. Ma se mostro / nascondo frammenti, non vedo questo problema.
Dave Jensen

Risposte:


84

Aggiornare:

Questo è un bug che è stato corretto nella versione 22.2.1 della libreria.

Risposta originale:

Come accennato da @shkschneider, questo è un bug noto . L'utente Github @ ljubisa987 ha recentemente pubblicato un Gist per una soluzione alternativa:

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

Come notato nei commenti, la soluzione alternativa funziona solo su Android Lollipop e versioni precedenti. Non funziona su Android M Preview.


1
Ebbene Android MDC è una versione di anteprima.
Dave Jensen

1
A proposito, sembra che lo stato del bug sia ora "Versione futura".
Dave Jensen

2
Commento n. 28 qui: code.google.com/p/android/issues/… funziona per me
J_Sizzle

1
Risolto nella versione 22.2.1.
Jdruwe

3
Siamo sicuri che questo problema sia stato risolto nella V22.2.1? Sto riscontrando questo problema nella libreria di progettazione v22.2.1 in esecuzione su Android versione 5.1.1. Ho due EditText in una barra degli strumenti a cui sto passando l'attività e il testo del suggerimento non viene visualizzato fino a quando non viene messo a fuoco.
StuStirling

13

Questo è un bug noto della libreria Android Design. È stato accettato e assegnato .

Quindi dovresti risolverlo nella prossima versione della libreria Android Design.

Nel frattempo, potresti guardare il tracker dei problemi per una correzione di hacky che potrebbe essere pubblicata lì, ma al momento non ne conosco nessuno.

E sì, interessa solo Lollipop e versioni successive.


1
Questo problema è stato risolto nella versione 22.2.1
Sam

11

Questo funziona per me in Design Library 23.1.1:

Imposta il colore del suggerimento negli attributi xml di TextInputLayout:

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

la proprietà textColorHint lo ha risolto anche per me.
JoM

6

Questo problema è stato risolto nella versione 22.2.1


5

dovresti usare android.support.v7.widget.AppCompatEditTextcome EditTexte impostare android:hintcome di seguito

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

Utilizza questo snippet di codice e assicurati che la tua attività sia AppCompatActivity. E le dipendenze sono anche con le ultime versioni

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

Aggiorna lo studio Android alla versione più recente. vedere l'output qui


3

Se stai impostando il tuo suggerimento EditText a livello di programmazione, non funzionerebbe! È necessario impostare il suggerimento sul TextInputLayout stesso.

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

Ecco l'XML nel caso ti stia chiedendo:

        <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

Questo problema è stato risolto nella v23.0.1libreria di progettazione di supporto. Ho anche aggiornato il mio appcompat-v7a 23.0.1, compileSdkVersiona 23e buildToolsVersiona 23.0.1in 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'
}

È necessario modificare compleSdkVersion, buildtools version e appCompatVersion quando si modifica la versione del design del supporto?
srinivas

Succede perché le "librerie di supporto" v23 richiedono l'API23 per compilare il progetto. Quindi la relazione principale è tra "librerie di supporto" e "compileSdkVersion". Dovresti sempre far corrispondere "compileSdkVersion" anche se "targetSdkVersion" o "minSdkVersion" sono inferiori. Il motivo è semplice, la versione della libreria riflette la versione dell'SDK Android contro di essa è stata costruita.
Wahib Ul Haq

2

Ho risolto il mio problema con questo codice:

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

La chiave qui è il file bringToFront. Costringe TextInputLayouta rifare il suo disegno, che non è la stessa cosa che fare invalidate(). Se stai cercando di visualizzare TextInputLayoutsu un viewche ha animationso tranistions, devi eseguire il codice sopra alla fine di animationo transition. Assicurati solo che il codice sopra venga eseguito sull'interfaccia utente thread.


0

Sembra che questo problema si verifichi quando imposti onFousListener su EditText: prova ad estendere EditText e supportare più onFocusListeners



0

Problema risolto: vai a build.gradle della tua app e controlla la libreria di progettazione. compila "com.android.support:design:22.2.1" Dovrebbe essere 22.2.1 o più recente.


0

Il problema è il colore del suggerimento. Diventa bianco quando si digita qualcosa. Si prega di cambiare il colore del suggerimento o cambiare il colore di sfondo. Vedrai il suggerimento durante la digitazione.


0

C'è una soluzione semplice a questo dato che ha funzionato per me

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

Basta aggiungere android: theme = "@ style / Base.TextAppearance.AppCompat" a TextEditLayout e dovrebbe funzionare e puoi cambiare il tema di cui hai bisogno.



0

Ho trovato qualcosa di diverso.

Quando si imposta lo stile per fragment,

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

Il bug era scomparso quando ho provato stili diversi rispetto a "Theme_DeviceDefault_Dialog".

Provaci.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.