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í