TextInputLayout no muestra la sugerencia EditText antes de que el usuario se enfoque en ella

96

Estoy usando la biblioteca de compatibilidad de diseño de Android lanzada recientemente para mostrar etiquetas flotantes con EditTexts. Pero me enfrento al problema de que la sugerencia en EditText no se muestra cuando se representa la interfaz de usuario, pero veo la sugerencia después de centrarme en los EditTexts.

Mi diseño es el siguiente:

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

También intenté establecer una pista para el TextInputLayoutmétodo de uso, setHintpero no tuve suerte.

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
fuente
Tengo el mismo problema. Para mi sorpresa, ejecutar la aplicación en el emulador 4.1 funcionó bien, pero en mi vista previa M habilitada, Nexus TextInputLayout se estaba comportando mal y no mostraba la pista para el EditText incrustado.
sashomasho
¿Puedes comprobar el color de tu pista o intentar cambiar el color de fondo de tu vista
Tal
@Ultimo_m Creo que el color de la pista no debe ser un problema. Sin embargo, intentaré echar un vistazo después de cambiar el color de fondo.
Shajeel Afzal
1
@Shajeel Afzal Les digo esta sugerencia porque tuve el mismo problema que ustedes, y cuando agregué el fondo a la vista vi la pista. Lo estoy usando dentro de un fragmento. No agregué ningún código de Java, todo lo que hice fue de xml
Ultimo_m
2
Veo este problema cuando agrego / elimino fragmentos. Pero si muestro / oculto fragmentos, no veo este problema.
Dave Jensen

Respuestas:

84

Actualizar:

Este es un error que se ha corregido en la versión 22.2.1 de la biblioteca.

Respuesta original:

Como lo mencionó @shkschneider, este es un error conocido . El usuario de Github @ ljubisa987 publicó recientemente un Gist para una solución alternativa:

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

Como se señaló en los comentarios, la solución solo funciona en Android Lollipop y versiones anteriores. No funciona en la Vista previa de Android M.

Dave Jensen
fuente
1
Bueno, Android MDC es una versión preliminar.
Dave Jensen
1
Por cierto, parece que el estado del error ahora es "Versión futura".
Dave Jensen
2
Comentario n.º 28 aquí: code.google.com/p/android/issues/… funciona para mí
J_Sizzle
1
Corregido en la versión 22.2.1.
Jdruwe
3
¿Estamos seguros de que esto está arreglado en V22.2.1? Estoy experimentando este problema en la biblioteca de diseño v22.2.1 que se ejecuta en la versión 5.1.1 de Android. Tengo dos EditText en una barra de herramientas a la que estoy haciendo la transición de actividad y el texto de la pista no se muestra hasta que se enfoca.
StuStirling
13

Ese es un error conocido de la biblioteca de diseño de Android. Ha sido aceptado y asignado .

Por lo tanto, debería solucionarlo en la próxima versión de la biblioteca de diseño de Android.

Mientras tanto, puede ver el rastreador de problemas en busca de una solución de piratería que podría publicarse allí, pero no conozco ninguna por ahora.

Y sí, solo afecta a Lollipop y superiores.

shkschneider
fuente
1
Este problema se solucionó en la versión 22.2.1
Sam
11

Esto me funciona en Design Library 23.1.1:

Establezca el color de la sugerencia en los atributos xml de TextInputLayout:

    <android.support.design.widget.TextInputLayout
        ....
        android:layout_margin="15dp"
        android:textColorHint="@color/hintColor"
        android:layout_width="match_parent"
        ...
Embydextrous
fuente
la propiedad textColorHint me lo arregló también.
JoM
6

Este problema se solucionó en la versión 22.2.1

Jdruwe
fuente
5

debe usar android.support.v7.widget.AppCompatEditTextcomo EditTexty establecer android:hintcomo a continuación

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

Utilice este fragmento de código. Asegúrese de que su actividad sea AppCompatActivity. Y la dependencia también está con las últimas versiones

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

Actualice Android Studio a la última versión. ver salida aquí

Ajinkya
fuente
3

Si está configurando su sugerencia EditText programáticamente, ¡no funcionaría! Debe establecer la sugerencia en el TextInputLayout en sí mismo.

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

Aquí está el XML en caso de que se lo pregunte:

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

Este problema se resuelve en la v23.0.1biblioteca de diseño de soporte. También actualicé mi appcompat-v7to 23.0.1, compileSdkVersionto 23& buildToolsVersionto 23.0.1en 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
fuente
¿Es necesario cambiar compleSdkVersion, buildtools version y appCompatVersion cuando se cambia la versión de diseño de soporte?
srinivas
Sucede porque las 'bibliotecas de soporte' v23 requieren la API23 para compilar el proyecto. Entonces, la relación principal es entre 'bibliotecas de soporte' y 'compileSdkVersion'. Siempre debe coincidir con 'compileSdkVersion' incluso si 'targetSdkVersion' o 'minSdkVersion' son inferiores. La razón es simple, la versión de la biblioteca refleja la versión del sdk de Android en la que se creó.
Wahib Ul Haq
2

Resolví mi problema con 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);

La clave aquí es el bringToFront. Obliga TextInputLayouta rehacer su dibujo, que no es lo mismo que hacerlo invalidate(). Si está intentando mostrar TextInputLayouten un viewque tiene animationso tranistions, debe ejecutar el código anterior al final de animationo transition. Solo asegúrese de que el código anterior se ejecute en la interfaz de usuario thread.

AndroidDev
fuente
0

Parece que este problema aparece cuando configura onFousListener en EditText: intente extender EditText y admitir múltiples onFocusListeners

nartus
fuente
0

Problema resuelto: vaya a build.gradle de su aplicación y verifique la biblioteca de diseño. compile 'com.android.support:design:22.2.1' Debería ser 22.2.1 o más reciente.

Abhishek
fuente
0

El problema es el color de la pista. Se vuelve blanco al escribir algo. Cambie el color de la pista o cambie el color de fondo. Verá la pista mientras escribe.

charitha amarasinghe
fuente
0

Hay una solución simple para esto, ya que funcionó para mí.

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

Simplemente agregue android: theme = "@ style / Base.TextAppearance.AppCompat" al TextEditLayout y debería funcionar y puede cambiar el tema según lo necesite.

Manish Kumar Singh
fuente
0

Solo agregue: android:hint="your_hint"para TextInputLayout.

Pratik Karale
fuente
0

Encontré algo diferente.

Al establecer el estilo para fragment,

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

El error desapareció cuando probé estilos diferentes a "Theme_DeviceDefault_Dialog".

Darle una oportunidad.

Jorge Cárdenas
fuente