Est-il possible de définir la marge ou le remplissage pour l'image que nous avons ajoutée avec le Android:drawableLeft
?
Comme cephus le mentionne, Android:drawablePadding
ne forcera le remplissage entre le texte et le dessin que si le bouton est assez petit.
Lors de la disposition de boutons plus grands, vous pouvez utiliser Android:drawablePadding
conjointement avec Android:paddingLeft
et Android:paddingRight
pour forcer le texte à être dessiné vers le centre du bouton. En ajustant séparément les marges gauche et droite, vous pouvez effectuer des réglages très détaillés de la mise en page.
Voici un exemple de bouton qui utilise un rembourrage pour rapprocher le texte et l'icône de ce qu'ils seraient par défaut:
<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" />
TextView a une propriété Android: drawablePadding qui devrait faire l'affaire:
Android: drawablePadding
Le remplissage entre les tirables et le texte.
Doit être une valeur de cote, qui est un nombre à virgule flottante ajouté avec une unité telle que "14.5sp". Les unités disponibles sont: px (pixels), dp (pixels indépendants de la densité), sp (pixels mis à l'échelle en fonction de la taille de police préférée ), in (pouces), mm (millimètres).
Cela peut également être une référence à une ressource (sous la forme "@ [Paquet:] type: nom") ou à un attribut de thème (sous la forme "?? [Paquet:] [type:] nom") contenant une valeur de ce type.
Cela correspond au symbole de ressource d'attribut global drawablePadding.
Android:drawablePadding
ne créera un espace de remplissage entre le texte et le dessin que si le bouton est assez petit pour écraser les 2 ensemble. Si votre bouton est plus large que la largeur combinée (drawableLeft/drawableRight) ou la hauteur (drawableTop/drawableBottom), alors drawablePadding ne fait rien.
Je me bats avec cela aussi maintenant. Mes boutons sont assez larges et l'icône est suspendue sur le bord gauche du bouton et le texte est centré au centre. Mon seul moyen de contourner cela pour le moment a été de cuire une marge sur le dessin en ajoutant des pixels vierges au bord gauche de la toile avec Photoshop. Pas idéal, et pas vraiment recommandé non plus. Mais c’est ma solution provisoire pour l’instant, à moins de reconstruire TextView/Button.
Oui. utilisez drawablePadding comme suit,
<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" />
Android:drawablePadding
est le moyen le plus simple de donner du remplissage à l’icône dessiné, mais vous ne pouvez pas donner de remplissage spécifique comme paddingRight
ou paddingLeft
de l’icône dessinable.Pour y parvenir, vous devez creuser ..__ Si vous appliquez paddingLeft
ou paddingRight
à Edittext
, le remplissage sera ajouté à Edittext
complet avec une icône dessinable.
Faites votre drawable 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>
définir une forme pour votre edittext et lui donner un rembourrage Par exemple
<?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>
Le rembourrage défini dans cette forme aidera à donner un rembourrage à tirant ou à droite ---------------------- Appliquer cette forme sur 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"
/>
utiliser cette forme définie comme arrière-plan donnera à votre EditText un style plus une marge pour drawableLeft.
Au lieu de Button
, utilisez LinearLayout
avec ImageView
et TextView
à l'intérieur. Dans les éléments enfants tels que ImageView
et TextView
, utilisez Android:duplicateParentState="true"
.
<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"/>
remarque: layout_width doit être wrap_content et utiliser paddingLeft paddingRight drawablePadding pour contrôler les espaces. Si vous spécifiez la valeur layout_width pour avoir un espace entre l'icône et le texte, je pense qu'une fois que vous attribuez à layout_width une valeur de spécification, le remplissage mesurera.
Vous pouvez utiliser un rembourrage pour le bouton et vous pouvez jouer avec 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" />
vous pouvez utiliser un rembourrage spécifique qui dépend de votre emplacement, avec Android: paddingLeft = "10dp" ou Android: paddingBottom = "10dp" ou Android: paddingRight = "10dp" ou Android: paddingTop = "10dp"
Je vais aussi jeter ma réponse sur le ring. Si vous souhaitez le faire par programme, vous pouvez procéder comme suit.
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);
Cela ajoutera le remplissage à la fin du dessin, où fin signifiera gauche/droite selon que le téléphone est en mode LTR ou RTL.
Vous devriez envisager d'utiliser une liste de couches
Créez un fichier comme celui-ci, appelez-le 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>
Sous fichier de mise en page,
<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"
/>
Android: drawablePadding est le moyen le plus simple d’attribuer un rembourrage à l’icône dessinable, mais vous ne pouvez pas attribuer un rembourrage spécifique comme un paddingDroite ou un paddingLeft of dessiné. Pour y parvenir, vous devez creuser. Et si vous appliquez paddingLeft ou paddingRight to Edittext, le padding sera placé sur l'ensemble de Edittext avec une icône dessinable.
<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"/>
Vous pouvez utiliser Android:drawableLeft="@drawable/your_icon"
pour que le dessin puisse être affiché à gauche. Afin de définir un remplissage pour le dessin, vous devez utiliser le Android:paddingLeft
ou le Android:paddingRight
pour définir le remplissage gauche/droit, respectivement.
Android:paddingRight="10dp"
Android:paddingLeft="20dp"
Android:drawableRight="@drawable/ic_app_manager"
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);
addressTitleView.setCompoundDrawablePadding();
Si la taille de la ressource pouvant être dessinée est fixe, vous pouvez procéder comme suit:
<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 clé ici est que:
Android:drawableRight="@drawable/ic_clear_black_24dp"
Android:paddingRight="10dp"
Android:paddingLeft="34dp"
C'est-à-dire que la taille de la ressource pouvant être extraite, plus paddingRight, correspond à paddingLeft.
il suffit de refaire 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>
à
<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>