android: drawableLeft margin and / o padding

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

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

Al diseñar 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 relleno para empujar el texto y el icono más cerca de lo que estarían de forma predeterminada:

  

TextView tiene una propiedad android: drawablePadding que debería funcionar:

android: drawablePadding

El relleno entre los dibujables y el texto.

Debe ser un valor de dimensión, que es un número de coma flotante 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), in (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.

android:drawablePadding solo creará una brecha de relleno entre el texto y el drawable 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 height (para DrawableTop / DrawableBottom), drawablePadding no hace nada.

Estoy luchando con esto en este momento también. Mis botones son bastante anchos, y el ícono está colgando en el borde izquierdo del botón y el texto está centrado en el medio. Mi única forma de evitar esto por ahora ha sido forjar un margen en el dibujo añadiendo píxeles en blanco al borde izquierdo del canvas con Photoshop. No es ideal, y tampoco es realmente recomendable. Pero esa es mi solución provisional, por ahora, menos que la reconstrucción de TextView / Button.

android:drawablePadding es la forma más fácil de dar relleno al icono dibujable, pero no se puede dar un relleno lateral específico como relleno. paddingRight o relleno. paddingRight paddingLeft extraíble. Para lograrlo, hay que profundizar en él. Y si aplica paddingLeft o paddingRight a Edittext , colocará relleno en todo el Edittext junto con un icono Edittext .

Haz tus recursos dibujables.xml

          

Sí. use drawablePadding de la siguiente manera,

  

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

        

El relleno definido en esta forma ayudará a que el relleno se mueva hacia la izquierda o hacia la derecha ———————- Aplique esta forma en EditView

   

usar esa forma definida como fondo le dará a su EditText cierto estilo más margen para drawableLeft.

En lugar de Button usa LinearLayout con ImageView y TextView dentro. En elementos secundarios como ImageView y TextView usa android: duplicateParentState = “true”.

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

   

Puedes usar un relleno específico dependiendo de dónde pongas tu dibujo, con android: paddingLeft = “10dp” o android: paddingBottom = “10dp” o android: paddingRight = “10dp” o android: paddingTop = “10dp”

Debes considerar usar la lista de capas

Cree un archivo dibujable como este, nómbrelo como ic_calendar.xml

            

En archivo de diseño,

  

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

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

Lanzaré mi respuesta al ring también. Si desea hacer esto programáticamente, puede hacer lo siguiente.

 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); 

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.

  

Nota: layout_width necesita ser wrap_content y usar paddingLeft paddingRight DrawablePadding para controlar gap. Si especifica el valor de layout_width, tendrá un espacio entre el icono y el texto, creo que una vez que le dé a layout_width un valor específico, el relleno medirá.

Si el tamaño del recurso dibujable es fijo, puede hacer esto:

  

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

Puedes ver el resultado en este ejemplo

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

Intenta usar relleno negativo

Me gusta:

 android:paddingLeft="-8dp"