EditText ajouté n'est pas un TextInputEditText. Veuillez passer à l'utilisation de cette classe à la place

93

J'utilise un EditTextinside a TextInputLayout, mais après la mise à niveau de la bibliothèque de support vers 23.2.0, j'obtiens cet avertissement dans le logcat, quelle est la différence entre un régulier EditTextet un TextInputEditText? Je n'arrive pas à trouver de documentation à ce sujet.

Silvia H
la source
J'ai mis à niveau ma bibliothèque de support vers 23.2.1 mais TextInputEditText ne peut toujours pas être résolu dans mon code . Comment as-tu résolu ça?
Edijae Crusar

Réponses:

109

Je me posais la question aussi, Daniel Wilson a rassemblé la documentation, mais pour un œil non averti, cela ne signifie pas grand-chose. Voici de quoi il s'agit: le «mode extraction» fait référence au type de vue qui s'affiche lorsque l'espace est trop petit, par exemple paysage sur un téléphone. J'utilise Galaxy S4 avec Google Keyboard comme éditeur de méthode de saisie (IME).

Interface utilisateur en mode paysage sans IME visible

En vous basant sur le focus (sur la description), vous pouvez voir TextInputLayouten action pousser le conseil en dehors de l'éditeur. Rien de spécial ici, c'est ce qui TextInputLayoutest censé faire.

Interface utilisateur en mode paysage sans IME visible

Interface utilisateur de paysage éditant un champ de nom vide

En modifiant le nom, vous pouvez voir que l'IME ne vous donne pas une idée de ce que vous modifiez.

Interface utilisateur de paysage éditant un champ de nom vide

Champ de description vide

En modifiant la description, vous pouvez voir que l'IME vous donne une idée de ce que vous modifiez.

Champ de description vide

XML de mise en page

La différence entre les deux champs est leur type EditTextVS TextInputEditText. La chose importante ici est que TextInputLayoutl ' android:hintEditText et non l' encapsulé sont inclus, c'est le cas lorsque TextInputEditTextles quelques lignes de code Java font une grande différence.

Champ de nom

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Name"
    >
    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
</android.support.design.widget.TextInputLayout>

Champ de description

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Item Description"
    >
    <android.support.design.widget.TextInputEditText
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:minLines="4"
        android:scrollbars="vertical"
        />
</android.support.design.widget.TextInputLayout>
TWiStErRob
la source
3
J'ai mis à niveau ma bibliothèque de support vers 23.2.1 mais TextInputEditText ne peut toujours pas être résolu dans mon code. Comment as-tu résolu ça?
Edijae Crusar le
Avez-vous également la bibliothèque de design? Ce n'est pas à l'appui.
TWiStErRob
1
Note rapide: selon la documentation, la android:hintpropriété est censée entrer à la TextInputEditTextplace de TextInputLayout.
DriesOeyen
1
@luxsypher, j'ai fini par le laisser tomber et utiliser l'autre méthode qui consiste à mettre EditText dans un TextInputLayout
Edijae Crusar
1
@ jeet.chanchawat c'est un upcast, donc c'est sûr. Vous devez toujours utiliser le type le plus général qui vous fournit la fonctionnalité (= API) nécessaire. L'utilisation TextInputEditTextest un détail d'implémentation de l'interface utilisateur.
TWiStErRob
34

Il n'y a pas de documentation pour cela, mais la classe est un classique EditTextavec une seule fonctionnalité supplémentaire:

L'utilisation de cette classe nous permet d'afficher un indice dans l'IME en mode «extraction».

Plus précisément, il définit le EditorInfo.hintText. Vous remarquerez dans la TextInputLayoutclasse que vous pouvez spécifier l'indication et son apparence plutôt que dans le cadre du EditTextwidget enfant .

Si vous avez besoin de le faire, vous devez utiliser un TextInputEditTextpour qu'il prenne en compte les informations d'indication que vous avez spécifiées dans le fichier TextInputLayout.

Daniel Wilson
la source
2
un exemple? Je n'ai aucune idée de ce que vous suggérez
behelit
4

Ils sont essentiellement la même chose, mais je pense que le TextInputEditTexta plus de fonctionnalités et éventuellement d'attributs. J'ai changé pour le TextInputEditTextet tout a fonctionné et avait l'air comme avant avec la norme EditText.

Nick Mowen
la source
J'utilise déjà TextInputLayout, je demande une alternative au EditText appelée TextInputEditText
Silvia H
Désolé, je parlais du TextInputEditText mais j'ai dit la mise en page. J'ai édité la réponse
Nick Mowen
0

La seule différence est que lorsque votre appareil est en mode paysage, TextInputEditTextil affichera l'indice, EditTextnon.

Sam Chen
la source
-3

J'ai eu ce problème et je viens de supprimer cette ligne dans mon fichier xml:

android: fitsSystemWindows = "true"

et l'erreur a disparu.

Santos Rodriguez
la source