TextInputLayout no muestra la sugerencia de EditText antes de que el usuario se centre en ella
Estoy usando la recientemente lanzada Android Design Support Library para mostrar la etiqueta flotante con EditTexts. Pero estoy enfrentando el problema que la indirecta en el EditText no está demostrando cuando UI se procesa, pero veo la indirecta después de que me fijo en el EditTexts.
Mi diseño es el siguiente:
- Cómo escalar la imagen en Android CollapsingToolbarLayout como WunderList hace
- Android SnackBar se bloquea al tocar con la biblioteca de soporte de diseño 23.0.0
- FAB - cuadrado en pre Lollipop y sin sombra en Lollipop
- En una acción de snackbar, ¿cómo puedo asegurarme de que es seguro borrar de forma permanente un registro borrado por software de la base de datos?
- Biblioteca de soporte de diseño V22 - No hay fuentes?
<?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 he intentado fijar la indirecta para el TextInputLayout
usando el método setHint
pero ninguna 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());
- ¿Cómo manejar los problemas de la nueva hoja inferior de la biblioteca de soporte / diseño?
- ¿Por qué algunas clases no son públicas en la Biblioteca de soporte de Android?
- CollapsingToolbarLayout ImageView no se puede desplazar
- CollapsingToolbarLayout con un ViewPager
- Pase el evento de desplazamiento a otra vista
- Androide, diseño, biblioteca, gradle, nulo, puntero, excepción
- ImageView en CollapsingToolbarLayout no cubre la altura completa?
- BottomSheetBehaviour setstate sin animación
Actualizar:
Se trata de un error que se ha corregido en la versión 22.2.1 de la biblioteca.
Original Respuesta:
Como se mencionó por @shkschneider, este es un error conocido . Github usuario @ ljubisa987 recientemente publicado un Gist para una solución:
https://gist.github.com/ljubisa987/e33cd5597da07172c55d
Como se señala en los comentarios, la solución sólo funciona en Android Lollipop y mayores. No funciona en la vista previa de Android M.
Es un error conocido de la biblioteca de diseño de Android. Ha sido aceptado y asignado .
Así que deberías arreglar esto en el próximo lanzamiento de la librería de Android Design.
Mientras tanto, podrías ver el rastreador de problemas para una corrección de hacky que podría publicarse allí, pero ahora no sé nada.
Y sí, sólo afectan a Lollipop y arriba.
Este problema se ha corregido en la versión 22.2.1
Usted debe utilizar android.support.v7.widget.AppCompatEditText
como EditText
y fijar android:hint
como abajo
<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>
Esto funciona para mí en la Biblioteca de Diseño 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" ...
<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 es AppCompatActivity. Y dependencia también están con las últimas versiones
compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:design:22.2.0'
Actualice el android studio a la última versión. Ver la salida aquí
Si está configurando la sugerencia EditText mediante programación, no funcionaría. Es necesario configurar la sugerencia en el TextInputLayout auto.
TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.usernameTextInputLayout); textInputLayout.setHint(getString(R.string.username_hint));
Aquí está el XML en caso de que se esté preguntando:
<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>
Este problema se resuelve en v23.0.1
de la biblioteca de diseño de soporte técnico. También actualizé mi appcompat-v7
a 23.0.1
, compileSdkVersion
a 23
y buildToolsVersion
a 23.0.1
en 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' }
He resuelto 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 a TextInputLayout
a rehacer su dibujo, que no es lo mismo que haciendo invalidate()
. Si está intentando mostrar el TextInputLayout
en una view
que tiene animations
o tranistions
, necesita ejecutar el código anterior al final de la animation
o transition
. Sólo asegúrese de que el código anterior se ejecuta en el thread
interfaz de usuario.
Parece que este problema aparece cuando se establece onFousListener en EditText – tratar de ampliar EditText y soportar múltiples onFocusListeners
Establece un color de pista que contraste con el fondo de EditarTexto.
<item name="android:textColorHint">#FF424242</item>
Relacionado:
SetHintTextColor () en EditText
Cambiar color de sugerencia de EditText cuando se utiliza TextInputLayout
Cómo cambiar el color de etiqueta flotante de TextInputLayout
Problema resuelto: Vaya a build.gradle de ur app y verifique la biblioteca de diseño. Compile 'com.android.support:design:22.2.1' Debe ser 22.2.1 o más reciente.
Encontré algo diferente.
Al establecer el estilo del fragmento,
F1.setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Light);
El error se había ido cuando probé diferentes estilos que "Theme_DeviceDefault_Dialog".
Darle una oportunidad.