trapezoid studio example create android android-layout android-drawable

studio - android: drawableLeft margen y/o relleno



shape size android (16)

Como cephus mencionó android:drawablePadding solo forzará el relleno entre el texto y el drawable si el botón es lo suficientemente pequeño.

Cuando android:paddingLeft botones más grandes, puede usar android:drawablePadding junto con android:paddingLeft y android:paddingRight para forzar el texto y dibujar hacia adentro hacia el centro del botón. Al ajustar el relleno izquierdo y derecho por separado, puede realizar ajustes muy detallados en el diseño.

Aquí hay un botón de ejemplo que usa el relleno para acercar el texto y el ícono más de lo que sería por defecto:

<Button android:text="@string/button_label" android:id="@+id/buttonId" android:layout_width="160dip" android:layout_height="60dip" android:layout_gravity="center" android:textSize="13dip" android:drawableLeft="@drawable/button_icon" android:drawablePadding="2dip" android:paddingLeft="30dip" android:paddingRight="26dip" android:singleLine="true" android:gravity="center" />

¿Es posible establecer el margen o el relleno de la imagen que agregamos con el android:drawableLeft ?


Deberías considerar usar la lista de capas

Cree un archivo dibujable como este, asígnele el nombre ic_calendar.xml

<TextView android:id="@+id/tvDate" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_calendar" android:textColor="@color/colorGrey" android:textSize="14sp" />

Debajo del archivo de diseño,

final Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.somedrawable); final boolean isLTR = ViewCompat.LAYOUT_DIRECTION_LTR == ViewCompat.getLayoutDirection(this); final int iconInsetPadding = getResources().getDimensionPixelSize(R.dimen.icon_padding); final Drawable insetDrawable = new InsetDrawable(drawable, isLTR ? 0 : iconInsetPadding, 0, isLTR ? iconInsetPadding : 0, 0);


En lugar del botón, use LinearLayout con ImageView y TextView dentro. En elementos secundarios como ImageView y TextView, use android: duplicateParentState = "true".


Haz tus recursos dibujables.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true"> <inset android:drawable="@drawable/small_m" android:insetLeft="10dp" android:insetTop="10dp" /> </item> <item> <inset android:drawable="@drawable/small_p" android:insetLeft="10dp" android:insetTop="10dp" /> </item> </selector>


Intenta usar relleno negativo

Me gusta:

android:paddingLeft="-8dp"


Puede usar android:drawableLeft="@drawable/your_icon" para configurar el dibujo que se mostrará en el lado izquierdo. Para configurar un relleno para el dibujo, debe usar android:paddingLeft o android:paddingRight para establecer el relleno izquierdo / derecho respectivamente.

android:paddingRight="10dp" android:paddingLeft="20dp" android:drawableRight="@drawable/ic_app_manager"


Puedes usar un relleno para el botón y puedes jugar con DrawablePadding

<Button style="@style/botonesMenu" android:padding="15dp" android:drawablePadding="-15dp" android:text="@string/actualizarBD" android:textAlignment="gravity" android:gravity="center" android:layout_row="1" android:layout_column="0" android:drawableTop="@drawable/actualizar" android:id="@+id/btnActualizar" android:onClick="actualizarBD" />

puede usar un relleno específico dependiendo de dónde coloque su dibujo, con android: paddingLeft = "10dp" o android: paddingBottom = "10dp" o android: paddingRight = "10dp" o android: paddingTop = "10dp"


Sí. use DrawablePadding de la siguiente manera,

<TextView android:id="@+id/tvHeader" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Settings and Contents" android:drawableLeft="@drawable/icon_success" android:drawablePadding="10dp" />


Si el tamaño del recurso extraíble es fijo, puede hacer lo siguiente:

<Button android:background="@drawable/rounded_button_green" style="?android:attr/selectableItemBackground" android:layout_height="wrap_content" app:layout_widthPercent="70%" android:drawableRight="@drawable/ic_clear_black_24dp" android:paddingRight="10dp" android:paddingLeft="34dp" tools:text="example" />

La clave aquí es que:

android:drawableRight="@drawable/ic_clear_black_24dp" android:paddingRight="10dp" android:paddingLeft="34dp"

Es decir, el tamaño del recurso dibujable más paddingRight es el paddingLeft.

Puedes ver el resultado en este ejemplo.


También arrojaré mi respuesta al ring. Si quieres hacer esto programáticamente puedes hacer lo siguiente.

<TextView android:layout_width="wrap_content" android:layout_height="32dp" android:background="@drawable/a" android:drawableLeft="@drawable/concern_black" android:gravity="center" android:paddingLeft="10dp" android:paddingRight="10dp" android:drawablePadding="10dp" android:text="text"/>

Esto agregará el relleno al final del dibujo, donde el final significará izquierda / derecha dependiendo de si el teléfono está en LTR o RTL.


TextView tiene una propiedad de android:drawablePadding que debería hacer el truco:

android: drawablePadding

El relleno entre los dibujables y el texto.

Debe ser un valor de dimensión, que es un número de punto flotante añadido con una unidad como "14.5sp". Las unidades disponibles son: px (píxeles), dp (píxeles independientes de la densidad), sp (píxeles escalados según el tamaño de fuente preferido), en (pulgadas), mm (milímetros).

Esto también puede ser una referencia a un recurso (en la forma "@ [paquete:] tipo: nombre") o atributo de tema (en la forma "? [Paquete:] [tipo:] nombre") que contiene un valor de este tipo .

Esto corresponde al símbolo de recurso de atributo global drawablePadding.


define una forma para tu texto de edición y dale un relleno Por ejemplo

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <padding android:left="5dp" android:right="5dp" /> <solid android:color="#F6F6F6" /> <stroke android:width="1px" android:color="#C3C3C3" /> <corners android:bottomLeftRadius="1dp" android:bottomRightRadius="1dp" android:topLeftRadius="1dp" android:topRightRadius="1dp" /> </shape>

El relleno definido en esta forma ayudará a proporcionar el relleno a drawableleft o right ---------------------- Aplicar esta forma en EditView

<EditText android:id="@+id/example" android:layout_width="fill_parent" android:layout_height="36dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:background="@drawable/shape2" android:drawableLeft="@drawable/icon1" android:drawablePadding="@dimen/txtDrwblPadding" android:ems="10" />

el uso de esa forma definida como fondo le dará a su EditText un poco de estilo más margen para drawableLeft.


android:drawablePadding es la forma más fácil de darle relleno al icono de drawable, pero no puede darle un relleno específico de un lado, como paddingRight o paddingLeft of drawable icon. Para lograrlo, tiene que profundizar en él. Y si aplica paddingLeft o paddingRight a Edittext , se colocará el relleno a todo el Edittext junto con un icono Edittext .


android:drawablePadding solo creará un espacio de relleno entre el texto y el dibujo si el botón es lo suficientemente pequeño como para aplastar los 2 juntos. Si su botón es más ancho que el ancho combinado (para drawableLeft / drawableRight) o la altura (para drawableTop / drawableBottom), drawablePadding no hace nada.

Estoy luchando con esto ahora también. Mis botones son bastante anchos, y el icono está colgado en el borde izquierdo del botón y el texto está centrado en el centro. Mi única forma de evitar esto por ahora ha sido hornear un margen en el dibujo agregando píxeles en blanco en el borde izquierdo del lienzo con photoshop. No es ideal, y tampoco es realmente recomendable. Pero esa es mi solución de emergencia por ahora, a falta de reconstruir TextView / Button.


<?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"/> </shape> </item> <item android:right="10dp"> <bitmap android:gravity="center_vertical|left" android:src="@drawable/ic_calendar_16dp" android:tint="@color/red" /> </item> </layer-list>

nota: layout_width debe ser wrap_content y usar paddingLeft paddingRight drawablePadding para controlar la brecha. Si especifica que el valor de layout_width tiene una brecha entre el ícono y el texto, creo que una vez que asigne a layout_width un valor específico, el relleno se medirá.


textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null); addressTitleView.setCompoundDrawablePadding();