textinputedittext style studio solo propiedades letras example eventos edittext android material-design android-design-library

android - style - TextInputLayout no muestra la sugerencia EditText antes de que el usuario se centre en ella



textinputedittext example (16)

Estoy usando la Biblioteca de soporte de diseño de Android recientemente lanzada para mostrar una etiqueta flotante con EditTexts. Pero me enfrento al problema de que la sugerencia en EditText no se muestra cuando se procesa la interfaz de usuario, pero veo la sugerencia después de enfocarme en 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 TextInputLayout usando el método setHint pero no setHint 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());


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.


Encontré algo diferente.

Al configurar el estilo para el fragmento,

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

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

Darle una oportunidad.


Ese es un code.google.com/p/android/issues/… de la biblioteca de diseño de Android. Ha sido aceptado y asignado .

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

Mientras tanto, puedes ver el rastreador de problemas para una solución hacky que podría publicarse allí, pero no sé nada por ahora.

Y sí, solo afecta a Lollipop y superior.


Establezca un color de pista que contraste con el fondo EditText.

<item name="android:textColorHint">#FF424242</item>

Relacionado:
setHintTextColor () en EditText
Cambie el color de la pista EditText cuando use TextInputLayout
Cómo cambiar el color de la etiqueta flotante de TextInputLayout


Este problema se resuelve en v23.0.1 de la biblioteca de diseño de soporte. También actualicé 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'' }


Este problema se solucionó en la versión 22.2.1


Esto funciona para mí en Design Library 23.1.1:

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

<android.support.design.widget.TextInputLayout .... android:layout_margin="15dp" android:textColorHint="@color/hintColor" android:layout_width="match_parent" ...


Hay una solución simple para esto, ya que esto 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.


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


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.


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 a TextInputLayout a rehacer su dibujo, que no es lo mismo que invalidate() . Si está tratando de mostrar TextInputLayout en una view que tiene animations o tranistions , debe ejecutar el código anterior al final de la animation o transition . Solo asegúrese de que el código anterior se ejecute en el thread la interfaz de usuario.


Si está configurando su sugerencia EditText mediante programación, ¡no funcionaría! Debe configurar la sugerencia en TextInputLayout por 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 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>


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


debe usar android.support.v7.widget.AppCompatEditText como EditText y establecer android:hint como 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>


Actualizar:

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

Respuesta original

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


<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 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 el estudio de Android a la última versión. ver salida aquí