Es posible establecer el margen o el relleno de la imagen que hemos añadido con el android:drawableLeft?

18 Comentarios

  1. 424

    Como el mencionado android:drawablePadding sólo de la fuerza de relleno entre el texto y la imagen, si el botón es lo suficientemente pequeño.

    Al diseñar los botones más grandes que usted puede utilizar android:drawablePadding en conjunción con android:paddingLeft y android:paddingRight para forzar el texto y la imagen hacia adentro, hacia el centro del botón. Ajustando el relleno izquierdo y derecho por separado, usted puede hacer muy ajustes detallados para el diseño.

    He aquí un botón de ejemplo que utiliza de relleno para insertar el texto y el icono más juntos 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" />  
    • android:elementos paddingleft=»30dip» android:paddingRight=»26dip» son la clave aquí!
    • esto no está relacionado con la pregunta, pero android:gravity=»center» va a mantener el texto alineado con el centro de la imagen!
    • Lo que si tenemos dibujables tanto a la izquierda y a la derecha, y sólo tiene que ajustar a la derecha dibujable??
    • Yo sólo uso: android:elementos paddingleft, y los cambios de posición de imagen. android:drawablePadding se utiliza para el espacio entre la imagen y el texto.
    • El problema de este código es que provoca passwordToggleDrawable margen izquierdo de la brecha de convertirse en más grande, ya que no pueden destino específico a la izquierda dibujable sólo.
  2. 168

    TextView tiene un android:drawablePadding de la propiedad que debe hacer el truco:

    android:drawablePadding

    El relleno entre el dibujables y el texto.

    Debe ser un valor de la dimensión, que es un número de punto flotante anexa
    con una unidad como «14.5 sp». Las unidades disponibles son: px (píxeles), dp
    (densidad de píxeles independientes), sp (en escala píxeles basándose en los preferidos
    el tamaño de la fuente), in (pulgadas), mm (milímetros).

    Esto también puede ser una referencia a un recurso (en el formulario
    «@[paquete:]tipo:nombre») o el tema de atributo (en el formulario
    «?[paquete:] [: tipo]nombre») que contiene un valor de este tipo.

    Esto se corresponde con el atributo global de recursos símbolo
    drawablePadding.

  3. 56

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

    Estoy luchando con esto ahora. Mis botones son bastante amplias, y el icono que está colgando en el borde izquierdo del botón y el texto se centra en el medio. Mi única manera de conseguir alrededor de esto, por ahora, ha sido a cocer en un margen sobre la imagen mediante la adición de píxeles en blanco a la izquierda del borde de la tela con photoshop. No es ideal, y la verdad no me recomendaba. Pero eso es mi stop-gap solución por ahora, corta de reconstrucción TextView/Botón.

    • gracias por explicar mi problema. Me he dado cuenta de que es causada sólo cuando el botón es lo suficientemente amplia como
    • Tengo el mismo problema. Mi botón de ancho, así que la imagen no está cerca el texto
  4. 39

    Sí. uso 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" />
  5. 32

    Hacer su dibujable resources.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>
    • El Mejor Artista que tengo uso de inserción en dibujable y está funcionando muy bien para la versión más reciente de los dispositivos. Me refiero a que no su trabajo en el SDK 16, 17 pero el trabajo en el SDK de 23. ¿Hay alguna idea?
    • developer.android.com/reference/android/graphics/drawable/… su API 1
    • Bonita respuesta y upvote para esto. Sólo me ayuden a resolver un problema que me confundió por un largo tiempo.
  6. 32

    android:drawablePadding es la forma más sencilla para dar relleno a dibujable icono pero no Se puede dar específico de uno de los lados de relleno como paddingRight o paddingLeft de dibujable icono.Para lograr que usted tiene que cavar en ella.
    Y Si se aplica paddingLeft o paddingRight a Edittext, a continuación, se colocará el relleno para toda la Edittext junto con dibujable icono.

  7. 12

    definir una forma para el edittext y darle 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 se define en esta forma se ayuda en dar relleno a drawableleft o a la derecha
    ———————- Aplicar esta forma de 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 que se definen de forma como de fondo le dará a su EditText algo de estilo más margen para drawableLeft.

  8. 7
    <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 necesita ser wrap_content y el uso de elementos paddingleft paddingRight drawablePadding para el control de vacío. Si especifica layout_width valor se le ha brecha entre el icono y el texto, creo que una vez que dan el layout_width una especificar el valor, el relleno va a medir.

  9. 7

    Lugar de Button uso LinearLayout con ImageView y TextView en el interior. En elementos secundarios, como ImageView y TextView uso android:duplicateParentState="true".

    • Usted realmente necesita un FrameLayout y un Botón (y el ImageView/TextView dentro de su propio LinearLayout) para reproducir el Botón de la interfaz de usuario y la transferencia de la onclicklistener() del botón de la parte
    • ¿Por qué el uso de diseño adicionales si usted ya tiene drawablePadding en el TextView.
  10. 5

    Voy a tirar mi respuesta en el anillo así. Si usted 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 se agrega el relleno a la final de la imagen que va a significar la izquierda/a la derecha dependiendo de si el teléfono está en LTR o RTL.

  11. 4

    Puede utilizar un relleno para el botón y usted puede 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 utilizar un relleno específicos depende donde poner su imagen, con android:elementos paddingleft=»10dp» o android:paddingBottom=»10dp» o android:paddingRight=»10dp» o android:paddingTop=»10dp»

  12. 3

    Usted debe considerar el uso de la capa de la lista

    Crear una imagen de archivo como este, nombre como 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>

    Bajo el 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" 
        />
  13. 2

    Puede utilizar android:drawableLeft="@drawable/your_icon" para establecer la imagen que se muestra en el lado izquierdo. Con el fin de establecer un relleno para la imagen debe utilizar el android:paddingLeft o android:paddingRight para establecer la izquierda/derecha relleno respectivamente.

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

    android:drawablePadding es la forma más sencilla para dar relleno a dibujable icono pero no Se puede dar específico de uno de los lados de relleno como paddingRight o elementos paddingleft de dibujable icono.Para lograr que usted tiene que cavar en ella. Y Si se aplica elementos paddingleft o paddingRight a Edittext, a continuación, se colocará el relleno a todo el Edittext junto con la imagen del icono.

    <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"/>
  15. 1

    Si el tamaño de la imagen resouce es fijo, puede hacer como esta:

    <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"

    Que es, el tamaño de la imagen de los recursos más paddingRight es los elementos paddingleft.

    Usted puede ver el resultado en este ejemplo

  16. 0
    textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);
    
    addressTitleView.setCompoundDrawablePadding();
    • Mientras este fragmento de código se puede resolver la cuestión, incluyendo una explicación realmente ayuda a mejorar la calidad de tu post. Recuerde que usted está respondiendo a la pregunta para los lectores en el futuro, y esas personas pueden no saber las razones de su sugerencia de código.
    • Esto sólo funciona para ver el texto no se por ejemplo, el botón que permite configurar la hora de inicio/final drwables
  17. 0

    sólo remake 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/xxxs"
                android:left="@dimen/xxxs"
                android:bottom="@dimen/xxxs"
                android:top="@dimen/xxxs"
                >
            <shape
                    xmlns:android="http://schemas.android.com/apk/res/android">
    
                <corners android:radius="40dp"/>
    
                <solid android:color="@android:color/white"/>
    
            </shape>
        </item>
    
    </layer-list>

Dejar respuesta

Please enter your comment!
Please enter your name here