web-dev-qa-db-fra.com

EditText ajouté n'est pas un TextInputEditText. S'il vous plaît passez à utiliser cette classe à la place

J'utilise un EditText dans un TextInputLayout, mais après la mise à niveau de la bibliothèque de support à 23.2.0, cet avertissement s'affiche dans le logcat. Quelle est la différence entre un EditText normal et un TextInputEditText? Je n'arrive pas à trouver de documentation pour cela.

87
Silvia H

Je me demandais aussi ceci, Daniel Wilson rassembla la documentation, mais pour un non-entraîné, cela ne voulait pas dire grand chose. Voici ce dont il s'agit: "mode d'extraction" fait référence au type de vue affiché lorsque l'espace est trop petit, par exemple, paysage sur un téléphone. J'utilise Galaxy S4 avec Google Keyboard en tant qu'IME.

Interface utilisateur de paysage sans IME visible

Selon le focus (sur Description), vous pouvez voir TextInputLayout en action en poussant l'indicateur en dehors de l'éditeur. Rien de spécial ici, c’est ce que TextInputLayout est censé faire.

Landscape UI without visible IME

Champ Nom vide de l'interface utilisateur Paysage

En modifiant le nom, vous constatez que l’IME ne vous donne pas une idée de ce que vous éditez.

Landscape UI editing empty Name field

Modification de l'interface utilisateur en mode paysage vide Description

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

Landscape UI editing empty Description field

XML de mise en page

La différence entre les deux champs est leur type EditText VS TextInputEditText. La chose importante ici est que TextInputLayout a le Android:hint et non le EditText encapsulé, c’est le cas lorsque les quelques lignes de TextInputEditText du code Java font une grande différence.

Champ 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>
105
TWiStErRob

Il n'y a pas de documentation pour cela, mais la classe est une EditText régulière avec une seule fonctionnalité supplémentaire:

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

Spécifiquement, il définit EditorInfo.hintText . Vous remarquerez que dans la classe TextInputLayout , vous pouvez spécifier le conseil et son apparence plutôt que dans le cadre du widget enfant EditText.

Si vous avez besoin de le faire, vous devez utiliser un TextInputEditText pour que les informations de conseil que vous avez spécifiées dans le TextInputLayout soient prises en compte.

31
Daniel Wilson

Ils sont essentiellement la même chose, mais je pense que la TextInputEditText a plus de fonctionnalités et éventuellement d’attributs. J'ai changé pour le TextInputEditText et tout a fonctionné et a ressemblé à ce qu'il était auparavant avec le standard EditText.

4
Nick Mowen