web-dev-qa-db-fra.com

TextInputLayout n'indique pas l'indicateur EditText avant que l'utilisateur ne se concentre dessus

J'utilise récemment Bibliothèque de supports de conception Android pour afficher une étiquette flottante avec EditTexts. Mais je suis confronté au problème que l'indice sur le EditText ne s'affiche pas lorsque l'interface utilisateur est rendue, mais je vois l'indice 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 définir un indice pour la variable TextInputLayout en utilisant la méthode setHint mais 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());
93
Shajeel Afzal

Mettre à jour:

C'est un bogue 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 . Github user @ 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 les versions antérieures. Cela ne fonctionne pas sur l'Android M Preview.

84
Dave Jensen

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

Cela devrait donc être corrigé dans la prochaine version de la bibliothèque Android Design.

En attendant, vous pouvez regarder le gestionnaire de problèmes pour un correctif qui pourrait y être posté, mais je n'en connais aucun pour l'instant.

Et oui, cela ne concerne que Lollipop et au-dessus.

13
shkschneider

Cela fonctionne pour moi dans la bibliothèque de conception 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"
        ...
10
Embydextrous

Ce problème est corrigé dans la version 22.2.1

6
Jdruwe

vous devez utiliser Android.support.v7.widget.AppCompatEditText comme EditText et définir Android:hint comme 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>
5
Ahmad
   <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é correspond à AppCompatActivity .

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

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

3
Ajinkya

Ce problème est résolu dans v23.0.1 de la bibliothèque de conception de support. J'ai également mis à jour mon appcompat-v7 à 23.0.1, compileSdkVersion à 23 & buildToolsVersion à 23.0.1 dans 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'
}
3
Wahib Ul Haq

Si vous définissez votre conseil EditText par programme, il ne fonctionnerait pas!.

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

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 la bringToFront. Il force le TextInputLayout à refaire son dessin, ce qui n’est pas la même chose que faire invalidate(). Si vous essayez d'afficher la TextInputLayout sur une view ayant animations ou tranistions, vous devez exécuter le code ci-dessus à la fin de la animation ou transition. Assurez-vous simplement que le code ci-dessus est exécuté sur l'interface utilisateur thread.

2
AndroidDev

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 bug avait disparu lorsque j'ai essayé des styles différents de "Theme_DeviceDefault_Dialog".

Essaie.

0
Jorge Cardenas

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

0
Pratik Karale

Il y a 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" à TextEditLayout et il devrait fonctionner. Vous pouvez modifier le thème à votre guise.

0

Le problème est la couleur de l'indice. Il devient blanc lorsque vous tapez quelque chose. Veuillez modifier la couleur de conseil ou la couleur de fond. Vous verrez le conseil en tapant.

0

Définissez une couleur de conseil qui contraste avec l'arrière-plan EditText.

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

En relation:
setHintTextColor () dans EditText
Change la couleur de l'index EditText lors de l'utilisation de TextInputLayout
Comment changer la couleur de l'étiquette flottante de TextInputLayout

0
Ivan Chau

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

0
Abhishek

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

0
nartus