¿Es posible establecer el margen o el relleno de la imagen que agregamos con el android:drawableLeft
?
¿Es posible establecer el margen o el relleno de la imagen que agregamos con el android:drawableLeft
?
Respuestas:
Como mencionó Cephus android:drawablePadding
, solo forzará el relleno entre el texto y el dibujo si el botón es lo suficientemente pequeño.
Al diseñar botones más grandes, puede usarlos android:drawablePadding
junto con android:paddingLeft
y android:paddingRight
para forzar el texto y el dibujo 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 acercar el texto y el icono de forma predeterminada:
<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" />
passwordToggleDrawable
espacio de relleno izquierdo se vuelva más grande, ya que no puede especificar el objetivo solo a la izquierda.
TextView tiene una propiedad 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 coma flotante agregado 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 del 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á 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 mismo 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 medio. Mi única forma de evitar esto por ahora ha sido hornear en un margen en el dibujable 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 provisional por ahora, salvo reconstruir TextView / Button.
Si. 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" />
Haga sus 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>
android:drawablePadding
es la forma más fácil de dar relleno a un icono dibujable, pero no puede dar un relleno lateral específico como paddingRight
o paddingLeft
de un icono dibujable. Para lograrlo, debe profundizar en él. Y si aplica paddingLeft
o paddingRight
para Edittext
, colocará el relleno completo Edittext
junto con el icono dibujable.
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 dar 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 algo de estilo más margen para drawableLeft.
android: drawablePadding es la forma más fácil de dar relleno a un icono dibujable, pero no puede proporcionar un relleno lateral específico como paddingRight o paddingLeft of drawable icon. Para lograrlo, debe profundizar en él. Y si aplica paddingLeft o paddingRight a Edittext, colocará el relleno en todo Edittext junto con el icono dibujable.
<TextView android:layout_width="match_parent"
android:padding="5sp"
android:id="@+id/date"
android:gravity="center|start"
android:drawableEnd="@drawable/ic_calendar"
android:background="@drawable/edit_background"
android:hint="Not Selected"
android:drawablePadding="10sp"
android:paddingStart="10sp"
android:paddingEnd="10sp"
android:textColor="@color/black"
android:layout_height="wrap_content"/>
<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"/>
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 un espacio entre el icono y el texto, creo que una vez que le dé al valor de layout_width un valor específico, se medirá el relleno.
También arrojaré mi respuesta al ring. Si desea hacer esto mediante programación, 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 final significará izquierda / derecha dependiendo de si el teléfono está en LTR o RTL.
En lugar de Button
usar LinearLayout
con ImageView
y TextView
dentro. En artículos infantiles como ImageView
y TextView
uso android:duplicateParentState="true"
.
Deberías considerar usar la lista de capas
Cree un archivo dibujable como este, asígnele el nombre ic_calendar.xml
<?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>
Debajo del archivo de diseño,
<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"
/>
Puede usar un relleno para el botón y puede jugar con relleno extraíble
<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 elemento de dibujo, con android: paddingLeft = "10dp" o android: paddingBottom = "10dp" o android: paddingRight = "10dp" o android: paddingTop = "10dp"
Puede usar android:drawableLeft="@drawable/your_icon"
para configurar el dibujo que se mostrará en el lado izquierdo. Para establecer un relleno para el dibujo, debe usar android:paddingLeft
o android:paddingRight
para configurar el relleno izquierdo / derecho respectivamente.
android:paddingRight="10dp"
android:paddingLeft="20dp"
android:drawableRight="@drawable/ic_app_manager"
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 extraíble más paddingRight es el paddingLeft.
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);
addressTitleView.setCompoundDrawablePadding();
solo rehacer de:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="40dp"/>
<solid android:color="@android:color/white"/>
</shape>
a
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:right="@dimen/_2dp"
android:left="@dimen/_2dp"
android:bottom="@dimen/_2dp"
android:top="@dimen/_2dp"
>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="40dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</layer-list>
Intenta usar relleno negativo
Me gusta:
android:paddingLeft="-8dp"