EditText adicionado não é um TextInputEditText. Por favor, mude para usar essa classe em vez disso

92

Estou usando um EditTextdentro de a TextInputLayout, mas depois de atualizar a biblioteca de suporte para 23.2.0, recebo este aviso no logcat: Qual é a diferença entre um regular EditTexte um TextInputEditText? Não consigo encontrar nenhuma documentação para isso.

Silvia H
fonte
Eu atualizei minha biblioteca de suporte para 23.2.1, mas ainda não é possível resolver TextInputEditText em meu código . Como você resolveu isso?
Edijae Crusar de

Respostas:

109

Eu também estava me perguntando isso, Daniel Wilson reuniu a documentação, mas para o olho não treinado isso não significa muito. É aqui que se trata: "modo de extração" refere-se ao tipo de visualização que é mostrado quando o espaço é muito pequeno, por exemplo, paisagem em um telefone. Estou usando o Galaxy S4 com o teclado do Google como editor de método de entrada (IME).

Paisagem UI sem IME visível

Com base no foco (na descrição), você pode ver TextInputLayoutem ação empurrando a dica para fora do editor. Nada de especial aqui, é isso que TextInputLayoutdevemos fazer.

Paisagem UI sem IME visível

IU em paisagem editando o campo Nome vazio

Editando o nome, você pode ver que o IME não dá uma dica do que você está editando.

IU em paisagem editando o campo Nome vazio

Campo de descrição vazio de edição da IU em paisagem

Editando a descrição, você pode ver que o IME dá uma dica do que você está editando.

Campo de descrição vazio de edição da IU em paisagem

XMLs de layout

A diferença entre os dois campos é seu tipo EditTextVS TextInputEditText. O importante aqui é que TextInputLayouttenha o android:hintEditText e não embrulhado, este é o caso quando TextInputEditTextpoucas linhas de código Java fazem uma grande diferença.

Campo de nome

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

Campo de descrição

<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
fonte
3
Eu atualizei minha biblioteca de suporte para 23.2.1, mas ainda TextInputEditText não pode ser resolvido em meu código. Como você resolveu isso?
Edijae Crusar
Você também tem a biblioteca de design? Isso não é um suporte.
TWiStErRob
1
Nota rápida: de acordo com os documentos, a android:hintpropriedade deve entrar em TextInputEditTextvez de TextInputLayout.
DriesOeyen
1
@luxsypher i acabei descartando e usando a outra forma que é colocar EditText em um TextInputLayout
Edijae Crusar
1
@ jeet.chanchawat é um upcast, então é seguro. Você deve sempre usar o tipo mais geral que fornece a funcionalidade (= API) necessária. Usar TextInputEditTexté um detalhe de implementação da IU.
TWiStErRob
34

Não há documentação para isso, mas a classe é regular EditTextcom um único recurso extra:

Usar esta classe nos permite exibir uma dica no IME quando no modo 'extrair'.

Especificamente, ele define o EditorInfo.hintText. Você notará na TextInputLayoutclasse que pode especificar a dica e sua aparência, em vez de como parte do EditTextwidget filho .

Se precisar fazer isso, você deve usar um TextInputEditTextpara que preste atenção às informações da dica que você especificou no TextInputLayout.

Daniel Wilson
fonte
2
algum exemplo? Não tenho ideia do que você está sugerindo
antes de
4

Eles são essencialmente a mesma coisa, mas acho que TextInputEditTexttem mais recursos e possivelmente atributos. Mudei para o TextInputEditTexte tudo funcionou e ficou como antes com o padrão EditText.

Nick Mowen
fonte
Eu já uso TextInputLayout, estou perguntando sobre uma alternativa ao EditText chamada TextInputEditText
Silvia H
Desculpe, eu estava falando sobre o TextInputEditText mas disse layout.
Editei
0

A única diferença é que quando seu dispositivo estiver no modo paisagem, TextInputEditTextvai mostrar a dica, EditTextnão vai.

Sam Chen
fonte
-3

Tive esse problema e acabei de excluir esta linha do meu arquivo xml:

android: fitsSystemWindows = "true"

e o erro desapareceu.

Santos Rodriguez
fonte