Eliminación del acolchado izquierdo en un Android EditText

El fondo predeterminado de EditText parece poner ~ 4dp de relleno a la izquierda. Esto causa desalineación con otros widgets.

Hice una aplicación simple para demostrar. Captura de pantalla:

Relleno izquierdo en EditText

Diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="HINT" android:text="TEXT" android:singleLine="true"/> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

¿Hay alguna forma de evitar que haga esto?

Una solución es utilizar margen negativo en los lados (-4dp)

Esto sólo funcionará cuando el fondo de EditText coincida con el fondo de Layout y no tenga nada en los lados en el Layout que estaría cubierto por el EditText

¿Has probado a agregar android: background = "@ android: color / transparent"?

Hice el mismo ejemplo con este resultado

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="HINT" android:text="TEXT" android:background="@android:color/transparent" android:singleLine="true"/> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

Introduzca aquí la descripción de la imagen

Segunda vía con líneas

Añadir un archivo xml en drawable como este

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent" /> <!--background color of box--> </shape> </item> <item android:top="-2dp" android:right="-2dp" android:left="-2dp"> <shape> <solid android:color="@android:color/transparent" /> <stroke android:width="1dp" android:color="#000000" /> <!-- color of stroke --> </shape> </item> </layer-list> 

Entonces en su diseño, agregue esto en su EdiciónTexto android: background = "@ drawable / edittext_background"

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="HINT" android:text="TEXT" android:background="@drawable/edittext_background" android:singleLine="true" android:layout_marginBottom="3dp"/> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

Y tendrás esto Introduzca aquí la descripción de la imagen

Cambiar el fondo de EditText a la costumbre, tiene nueve patch padding

Si desea alinear sólo el texto y no la línea inferior, puede sobrescribir el relleno mediante programación.

Así que digamos que este diseño es para una actividad. Una vez creada la actividad, puedes hacer algo como:

 findViewById(R.id.edit_text).setPaddding( 0, old_top_paddding, old_right_paddding, old_bottom_padding); 

La clave es volver a configurar el relleno una vez que se ha aplicado el fondo. Es posible que tenga que ver los casos en que el fondo se establece de nuevo, así que tal vez una idea es anular los setBackground*() y volver a configurar el relleno allí.

Utilice android:layout_marginLeft="-4dp" en el campo de edición de texto de la siguiente manera.

 <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="HINT" android:text="TEXT" android:layout_marginLeft="-4dp" android:singleLine="true"/> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="HINT" android:text="TEXT" android:singleLine="true"/> <TextView android:background="#00ff00" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

Quitar el relleno del propio LinearLayout 🙂

Captura de pantalla:

Con rellenos modificados

  • Uso de la API de Google Places
  • ¿Cómo tener un pie de página fijo con scrollview en android?
  • Vista de lista de fondo de pie de página en Android 2.3.3
  • Más de 3 elementos en la barra de navegación inferior android
  • Relativelayout dentro Scrollview no funciona
  • ¿Cuál es una buena manera de probar los métodos onMeasure / onLayout / onDraw de una vista personalizada?
  • Realice una actualización ProgressBar sin problemas
  • Problemas con burbujas de charla de diseño: TextView llena toda la pantalla
  • StackOverflowError al cambiar la visibilidad de la vista
  • El botón "Sí" no aparece en el cuadro de confirmación de la aplicación de Android.
  • Android - reducir EditText flotante etiqueta de relleno / margen?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.