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());
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.
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.
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"
...
Ce problème est corrigé dans la version 22.2.1
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>
<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
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'
}
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>
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
.
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.
Ajoutez simplement: Android:hint="your_hint"
pour TextInputLayout
.
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.
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.
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
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.
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