TextInputLayout não mostra a dica EditText antes que o usuário se concentre nele

96

Estou usando a Biblioteca de Suporte a Design do Android lançada recentemente para mostrar rótulos flutuantes com EditTexts. Mas estou enfrentando o problema de que a dica no EditText não é exibida quando a interface do usuário é renderizada, mas vejo a dica depois de me concentrar nos EditTexts.

Meu layout é o seguinte:

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

Eu também tentei definir dicas para o TextInputLayoutmétodo de uso, setHintmas sem sorte.

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());
Shajeel Afzal
fonte
Eu tenho o mesmo problema. Para minha surpresa, executar o aplicativo no emulador 4.1 funcionou bem, mas no meu Nexus TextInputLayout habilitado para visualização M estava se comportando mal e não mostrava a dica para o EditText incorporado.
sashomasho
Você pode verificar a cor da dica ou tentar alterar a cor do plano de fundo da visualização, talvez eles estejam lá, mas você não consegue ver por causa da cor
Ultimo_m
@Ultimo_m acho que a cor da dica não deve ser problema. No entanto, vou tentar dar uma olhada depois de mudar a cor de fundo.
Shajeel Afzal
1
@Shajeel Afzal Estou te dando esta sugestão porque tive o mesmo problema que você, e quando adicionei fundo à vista vi a dica. Estou usando dentro de um fragmento. Não adicionei nenhum código de java, tudo que fiz foi de xml
Ultimo_m
2
Estou tendo esse problema quando adiciono / removo fragmentos. Mas se eu mostrar / ocultar fragmentos, não vejo esse problema.
Dave Jensen

Respostas:

84

Atualizar:

Este é um bug que foi corrigido na versão 22.2.1 da biblioteca.

Resposta Original:

Conforme mencionado por @shkschneider, este é um bug conhecido . O usuário do Github @ ljubisa987 postou recentemente um Síntese para uma solução alternativa:

https://gist.github.com/ljubisa987/e33cd5597da07172c55d

Conforme observado nos comentários, a solução alternativa só funciona no Android Lollipop e anteriores. Não funciona no Android M Preview.

Dave Jensen
fonte
1
Bem, o Android MDC é uma versão de visualização.
Dave Jensen
1
BTW, parece que o status do bug agora é "Versão futura".
Dave Jensen
2
Comentário nº 28 aqui: code.google.com/p/android/issues/… funciona para mim
J_Sizzle
1
Corrigido na versão 22.2.1.
Jdruwe
3
Temos certeza de que isso foi corrigido na V22.2.1? Estou tendo esse problema na biblioteca de design v22.2.1 em execução no Android versão 5.1.1. Eu tenho dois EditText em uma barra de ferramentas para a qual sou Activity Transitioning e o texto de dica não é mostrado até que seja focalizado.
StuStirling de
13

Esse é um bug conhecido da biblioteca Android Design. Foi aceito e atribuído .

Portanto, você deve corrigir isso no próximo lançamento da biblioteca de design do Android.

Nesse ínterim, você pode observar o rastreador de problemas para uma correção de hacky que pode ser postada lá, mas eu não conheço nenhuma até agora.

E sim, isso afeta apenas Lollipop e acima.

shkschneider
fonte
1
Este problema foi corrigido na versão 22.2.1
Sam
11

Isso funciona para mim na Design Library 23.1.1:

Defina a cor da dica nos atributos xml de TextInputLayout:

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...
Embydextrous
fonte
a propriedade textColorHint também corrigiu isso para mim.
JoM de
6

Este problema foi corrigido na versão 22.2.1

Jdruwe
fonte
5

você deve usar android.support.v7.widget.AppCompatEditTextcomo EditTexte definir android:hintcomo abaixo

<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>
Ahmad
fonte
3
   <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>

Use este snippet de código. Certifique-se de que sua atividade seja AppCompatActivity. E a dependência também está com as versões mais recentes

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

Atualize o Android Studio para a versão mais recente. veja a saída aqui

Ajinkya
fonte
3

Se você estiver configurando sua dica EditText programaticamente, não funcionará! Você precisa definir a dica no próprio TextInputLayout.

TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.usernameTextInputLayout);
textInputLayout.setHint(getString(R.string.username_hint));

Aqui está o XML, caso você esteja se perguntando:

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

Esse problema foi resolvido na v23.0.1biblioteca de design de suporte. Eu também atualizei meu appcompat-v7to 23.0.1, compileSdkVersionto 23e buildToolsVersionto 23.0.1em 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'
}
Wahib Ul Haq
fonte
É necessário alterar compleSdkVersion, buildtools version e appCompatVersion ao alterar a versão de design de suporte ??
srinivas
Isso acontece porque as 'bibliotecas de suporte' v23 requerem a API23 para compilar o projeto. Portanto, a relação principal é entre 'bibliotecas de suporte' e 'compileSdkVersion'. Você sempre deve corresponder a 'compileSdkVersion' mesmo se 'targetSdkVersion' ou 'minSdkVersion' forem inferiores. A razão é simples, a versão da biblioteca reflete a versão do SDK do Android em relação à qual foi construída.
Wahib Ul Haq
2

Resolvi meu problema com este código:

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

A chave aqui é o bringToFront. Força o TextInputLayouta refazer o desenho, o que não é o mesmo que fazer invalidate(). Se você estiver tentando exibir o TextInputLayoutem um viewque tenha animationsou tranistions, será necessário executar o código acima no final do animationou transition. Apenas certifique-se de que o código acima seja executado na IU thread.

AndroidDev
fonte
0

Parece que este problema aparece quando você define onFousListener em EditText - tente estender EditText e oferecer suporte a vários onFocusListeners

Nartus
fonte
0

Problema resolvido: Vá para build.gradle do seu aplicativo e verifique a biblioteca de design. compile 'com.android.support:design:22.2.1' Deve ser 22.2.1 ou mais recente.

Abhishek
fonte
0

O problema é a cor da dica. Ele fica branco ao digitar algo. Por favor, mude a cor da dica ou mude a cor de fundo. Você verá a dica ao digitar.

Charitha Amarasinghe
fonte
0

Existe uma solução simples para isso, pois funcionou para mim

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

Basta adicionar android: theme = "@ style / Base.TextAppearance.AppCompat" ao TextEditLayout e deve funcionar e você pode alterar o tema conforme necessário.

Manish Kumar Singh
fonte
0

Basta adicionar: android:hint="your_hint"para TextInputLayout.

Pratik Karale
fonte
0

Eu encontrei algo diferente.

Ao definir o estilo para o fragment,

f1.setStyle(DialogFragment.STYLE_NO_FRAME,android.R.style.Theme_DeviceDefault_Light);

O bug foi embora quando tentei estilos diferentes de "Theme_DeviceDefault_Dialog".

De uma chance.

Jorge Cardenas
fonte