TextInputLayout n'affiche pas l'indication EditText avant que l'utilisateur ne se concentre dessus

96

J'utilise la bibliothèque de support de conception Android récemment publiée pour afficher une étiquette flottante avec EditTexts. Mais je suis confronté au problème que l'indication sur le EditText ne s'affiche pas lorsque l'interface utilisateur est rendue, mais je vois l'indication après que je me concentre sur les EditTexts.

Ma mise en page est la suivante:

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

J'ai également essayé de donner un indice pour la TextInputLayoutméthode d'utilisation setHintmais pas de chance.

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());
Shajeel Afzal
la source
J'ai le même problème. À ma grande surprise, l'exécution de l'application sur l'émulateur 4.1 fonctionnait très bien, mais sur mon aperçu M activé, Nexus TextInputLayout se comportait mal et ne montrait pas l'indication pour le EditText intégré.
sashomasho
Pouvez-vous vérifier la couleur de votre indice ou essayer de changer la couleur d'arrière-plan de votre vue, peut-être qu'ils sont là mais vous ne pouvez pas voir à cause de la couleur
Ultimo_m
@Ultimo_m je pense que la couleur de l'indice ne doit pas être un problème. Cependant, j'essaierai de jeter un œil après avoir changé la couleur de fond.
Shajeel Afzal
1
@Shajeel Afzal Je vous fais cette suggestion parce que j'ai eu le même problème que vous, et quand j'ai ajouté un arrière-plan à la vue, j'ai vu l'indice. Je l'utilise dans un fragment. Je n'ai ajouté aucun code de java, tout ce que j'ai fait est de xml
Ultimo_m
2
Je vois ce problème lorsque j'ajoute / supprime des fragments. Mais si j'affiche / masque des fragments, je ne vois pas ce problème.
Dave Jensen

Réponses:

84

Mettre à jour:

Il s'agit d'un bogue qui a été corrigé dans la version 22.2.1 de la bibliothèque.

Réponse originale:

Comme mentionné par @shkschneider, il s'agit d'un bogue connu . L'utilisateur Github @ ljubisa987 a récemment publié un Gist pour une solution de contournement:

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

Comme indiqué dans les commentaires, la solution de contournement ne fonctionne que sur Android Lollipop et versions antérieures. Cela ne fonctionne pas sur l'Android M. Preview.

Dave Jensen
la source
1
Eh bien, Android MDC est une version préliminaire.
Dave Jensen
1
BTW, il semble que le statut du bogue soit maintenant "Future Release".
Dave Jensen
2
Commentaire n ° 28 ici: code.google.com/p/android/issues/… fonctionne pour moi
J_Sizzle
1
Corrigé dans la version 22.2.1.
Jdruwe
3
Sommes-nous sûrs que cela est résolu dans la V22.2.1? Je rencontre ce problème dans la bibliothèque de conception v22.2.1 exécutée sur la version Android 5.1.1. J'ai deux EditText dans une barre d'outils vers lesquels je suis en train de faire la transition d'activité et le texte de l'indice ne s'affiche pas tant que le focus n'est pas mis.
StuStirling
13

C'est un bogue connu de la bibliothèque Android Design. Il a été accepté et attribué .

Vous devriez donc avoir cela corrigé dans la prochaine version de la bibliothèque Android Design.

En attendant, vous pouvez regarder le suivi des problèmes pour un correctif de piratage qui pourrait y être posté, mais je n'en connais pas pour le moment.

Et oui, cela n'affecte que Lollipop et plus.

shkschneider
la source
1
Ce problème est résolu dans la version 22.2.1
Sam
11

Cela fonctionne pour moi dans Design Library 23.1.1:

Définissez la couleur de l'indice dans les attributs xml de TextInputLayout:

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...
Embydextre
la source
la propriété textColorHint l'a également corrigé pour moi.
JoM
6

Ce problème est résolu dans la version 22.2.1

Jdruwe
la source
5

vous devez utiliser android.support.v7.widget.AppCompatEditTextcomme EditTextet définir android:hintcomme ci-dessous

<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>
Ahmad
la source
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>

Utilisez cet extrait de code.Assurez-vous que votre activité est AppCompatActivity. Et les dépendances sont également avec les dernières versions

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

Mettez à jour le studio Android vers la dernière version. voir la sortie ici

Ajinkya
la source
3

Si vous définissez votre indice EditText par programme, cela ne fonctionnera pas! Vous devez définir l'indicateur sur le TextInputLayout lui-même.

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

Voici le XML au cas où vous vous poseriez la question:

        <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>
Muhammad Alfaifi
la source
3

Ce problème est résolu dans la v23.0.1bibliothèque de conception de support. J'ai également mis appcompat-v7à jour mon to 23.0.1, compileSdkVersionto 23et buildToolsVersionto 23.0.1dans 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'
}
Wahib Ul Haq
la source
Est-il nécessaire de changer compleSdkVersion, la version de buildtools et appCompatVersion lorsque vous changez la version de conception de support?
srinivas
Cela se produit parce que les «bibliothèques de support» v23 nécessitent l'API23 pour compiler le projet. La relation principale est donc entre «bibliothèques de support» et «compileSdkVersion». Vous devez toujours correspondre à «compileSdkVersion» même si «targetSdkVersion» ou «minSdkVersion» sont inférieurs. La raison est simple, la version de la bibliothèque reflète la version du sdk Android contre laquelle elle a été construite.
Wahib Ul Haq
2

J'ai résolu mon problème avec ce code:

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 clé ici est le bringToFront. Cela oblige le TextInputLayoutà refaire son dessin, ce qui n'est pas la même chose que faire invalidate(). Si vous essayez d'afficher le TextInputLayoutsur un viewqui a animationsou tranistions, vous devez exécuter le code ci-dessus à la fin de animationou transition. Assurez-vous simplement que le code ci-dessus s'exécute sur l'interface utilisateur thread.

AndroidDev
la source
0

On dirait que ce problème apparaît lorsque vous définissez onFousListener sur EditText - essayez d'étendre EditText et de prendre en charge plusieurs onFocusListeners

Nartus
la source
0

Problème résolu: accédez à build.gradle de votre application et vérifiez la bibliothèque de conception. compilez 'com.android.support:design:22.2.1' Il devrait être 22.2.1 ou plus récent.

Abhishek
la source
0

Le problème est la couleur de l'indice. Il devient blanc en tapant quelque chose. Veuillez changer la couleur de l'indice ou changer la couleur d'arrière-plan. Vous verrez l'indice lors de la saisie.

charitha amarasinghe
la source
0

Il existe une solution simple à cela car cela a fonctionné pour moi

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

Ajoutez simplement android: theme = "@ style / Base.TextAppearance.AppCompat" au TextEditLayout et cela devrait fonctionner et vous pouvez changer le thème selon vos besoins.

Manish Kumar Singh
la source
0

Ajoutez simplement: android:hint="your_hint"pour TextInputLayout.

Pratik Karale
la source
0

J'ai trouvé quelque chose de différent.

Lors de la définition du style du fragment,

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

Le bogue avait disparu lorsque j'ai essayé des styles différents de "Theme_DeviceDefault_Dialog".

Essaie.

Jorge Cardenas
la source