android - textinputedittext - textinputlayout error




TextInputLayout: ¿Cómo dar relleno o margen a la pista? (6)

Creo que deberías considerar esto:

La biblioteca de diseño adopta un enfoque interesante para personalizar EditText : no lo cambia directamente. En cambio, TextInputLayout se usa para ajustar EditText y proporcionar las mejoras.

El primero, que muestra una etiqueta flotante cuando el usuario escribe algo en el campo, se realiza de forma automática. TextInputLayout encuentra EditText entre sus elementos EditText y se adjunta como TextWatcher , por lo que puede determinar cuándo se ha modificado el campo y anima el movimiento de la sugerencia desde su lugar habitual en EditText a la posición de etiqueta flotante situada encima.

La segunda mejora, que muestra el mensaje de error, requiere un ligero cambio en el código. En lugar de establecer el error en EditText, el error debe establecerse en TextInputLayout . Esto se debe a que no hay forma automática de que TextInputLayout una notificación cuando el error se establece en EditText . Así es como se vería el diseño:

<android.support.design.widget.TextInputLayout
    android:id="@+id/username_text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:id="@+id/username_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/username_hint"/>
</android.support.design.widget.TextInputLayout>

Tenga en cuenta que tanto EditText como TextInputLayout necesitan ID de diseño. En el fragmento, necesitaríamos configurar TextInputLayout para permitir la visualización de errores:

TextInputLayout usernameTextInputLayout = (TextInputLayout) view.findViewById(R.id.username_text_input_layout);
usernameTextInputLayout.setErrorEnabled(true);
...
usernameTextInputLayout.setError(R.string.username_required);

Tengo que usar TextInputLayout de la biblioteca de soporte de diseño en mi proyecto. Quiero dar espacio entre la hint y EditText en TextInputLayout . Establecí el margen y el relleno en TextInputLayout e incluso dentro de EditText pero ambos no funcionan. Por lo tanto, cómo resolver este problema. Aquí adjunto una captura de pantalla y mi codificación.

==============================Style=================================

<style name="TextHint" parent="Base.TextAppearance.AppCompat">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@color/green</item>
</style>



=============================XML===================================  
<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    app:hintTextAppearance="@style/TextHint"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_height="wrap_content">
<EditText
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:id="@+id/edttxtEmailAddress"
    android:singleLine="true"
    android:hint="@string/enter_valid_email"
    android:paddingLeft="20dp"
    android:textSize="20sp"
    android:background="@drawable/rounded_common"/>
</android.support.design.widget.TextInputLayout>


He estado buscando la solución a esta pregunta en los últimos días. Después de arrancarme los pelos durante horas, finalmente encontré una solución simple. Lo que he notado es que si tienes un fondo personalizado configurado en EditText, el atributo android: paddingTop simple no funciona para alterar el espaciado b / w el texto de sugerencia y editar el texto (realmente no tengo idea de por qué). Entonces, si ha configurado un fondo personalizado para su EditText, puede usar el atributo android: translationY en EditText .

Así que aquí está tu solución:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="10dp"
    app:hintTextAppearance="@style/TextHint">

    <EditText
        android:id="@+id/edttxtEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@drawable/rounded_common"
        android:hint="@string/enter_valid_email"
        android:paddingLeft="20dp"

        android:translationY="10dp" 

        android:singleLine="true"
        android:textSize="20sp" />
</android.support.design.widget.TextInputLayout>

Espero eso ayude. :)

Actualización: Mis más sinceras disculpas por la actualización tardía. He estado muy ocupado últimamente. Si aún no te has dado cuenta déjame decirte que esta respuesta es fea y errónea . En retrospectiva, creo que probablemente estaba ebrio cuando lo escribí. Como lo mencionaron otros, podría cortar la región inferior del fondo editText, pero también hay una solución fea: puede establecer el tamaño de la (parent) textInputLayout más grande (¿qué tan grande? Se supone que debe encontrarlo por prueba y error, yuck!) que el (niño) editText. Espero que todos se den cuenta de que sería una locura así que por favor no lo hagas. Mira la respuesta escrita por @Radu Topor, es por lejos la mejor y más limpia solución a esta pregunta. Gracias.


La respuesta de @RaduTopor es buena, pero creo que también necesitamos agregar android: bottom o también des-centra el texto de pista que se muestra dentro de EditText cuando no está enfocado

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:top="@dimen/floating_hint_margin" android:bottom="@dimen/floating_hint_margin">
    <your original background; can be <bitmap> or <shape> or whatever./>
  </item>
</layer-list>

Antes (respuesta de RaduTopor):

Después:


La solución propuesta por ganesh2shiv funciona en su mayor parte, aunque he encontrado que también des-centra el texto de sugerencia que se muestra dentro de EditText cuando no está enfocado.

Un mejor truco es establecer el paddingTop deseado en EditText, pero también incorporar el relleno adicional dentro del fondo de EditText. Una forma bastante sensata de hacerlo es envolver su fondo original en una <layer-list> y establecer el atributo <item android:top="..."> para que coincida con el paddingTop de su EditText.

<android.support.design.widget.TextInputLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

  <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/floating_hint_margin"
    android:background="@drawable/bg_edit_text" />
</android.support.design.widget.TextInputLayout>

Y el archivo bg_edit_text.xml :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:top="@dimen/floating_hint_margin">
    <your original background; can be <bitmap> or <shape> or whatever./>
  </item>
</layer-list>

Probé los cambios de relleno, pero no funciona bien.

Una solución simple es cambiar la altura del TIL:

android:layout_height="wrap_content"

para (por ejemplo)

android:layout_height="50dp"

podría no dar el mismo resultado en todos los tamaños de pantalla.

Y añadir

android:gravity="bottom" 

para empujar tu texto hacia abajo


Solo agregue a su fondo personalizado EditText

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
        <shape android:shape="rectangle">
            <padding
                android:top="4dp"/> // your padding value
        </shape>
    </item>
// customize your background items if you need
</layer-list>
<android.support.design.widget.TextInputLayout
 ...>
    <android.support.design.widget.TextInputEditText
        ...
        android:background="@style/your_custom_background"/>

luego, aplícalo a tu EditText y aumenta la altura de tu EditText con tu valor de relleno si usas la altura de la corrección





android-textinputlayout