J'ai quelques boutons comme celui-ci dans mon application:
<Button
android:id="@+id/bSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="Search"
android:textSize="24sp" />
J'essaye de créer un même bouton avec du texte et une icône. android: drawableLeft ne fonctionne pas pour moi (peut-être que ça le ferait, mais je ne sais pas comment définir une hauteur maximale pour l'icône).
J'ai donc créé un LinearLayout avec un ImageView et un TextView et l'ai fait agir comme un bouton:
<LinearLayout
android:id="@+id/bSearch2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_default"
android:clickable="true"
android:padding="16dp"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:adjustViewBounds="true"
android:maxHeight="30dp"
android:maxWidth="30dp"
android:scaleType="fitCenter"
android:src="@drawable/search_icon" />
<TextView
android:id="@+id/tvSearchCaption"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="24sp"
android:paddingRight="30dp"
android:gravity="center"
android:text="Search" />
</LinearLayout>
Mon nouveau bouton est exactement ce que je veux (taille de police, icône et placement du texte). Mais cela ne ressemble pas à mes boutons par défaut:
J'ai donc essayé de changer l'arrière-plan et la couleur du texte de mon nouveau bouton:
Button Search = (Button) findViewById(R.id.bSearch);
LinearLayout bSearch2 = (LinearLayout) findViewById(R.id.bSearch2);
bSearch2.setBackground(bSearch.getBackground());
TextView tvSearchCaption = (TextView)findViewById(R.id.tvSearchCaption);
tvSearchCaption.setTextColor(bSearch.getTextColors().getDefaultColor());
Cela donne un résultat étrange, mon ancien bouton, est foiré:
Lorsque je change l'ordre de ces deux boutons dans le XML, donc le "nouveau bouton" passe en premier, cela fait un autre résultat étrange:
Maintenant, j'ai remarqué que lorsque j'essaye d'appuyer sur l'ancien bouton, le nouveau est pressé.
Des idées?
Pour ajouter une image à gauche, à droite, en haut ou en bas, vous pouvez utiliser des attributs comme celui-ci:
android:drawableLeft android:drawableRight android:drawableTop android:drawableBottom
L'exemple de code est donné ci-dessus. Vous pouvez également y parvenir en utilisant une disposition relative.
la source
android:drawableStart
au lieu de Gauche etandroid:drawableEnd
au lieu de Droite.Pour tous ceux qui cherchent à le faire de manière dynamique
setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
, l'objet boutons aidera.Échantillon
Button search = (Button) findViewById(R.id.yoursearchbutton); search.setCompoundDrawables('your_drawable',null,null,null);
la source
C'est ce que tu veux vraiment.
<Button android:id="@+id/settings" android:layout_width="190dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@color/colorAccent" android:drawableStart="@drawable/ic_settings_black_24dp" android:paddingStart="40dp" android:paddingEnd="40dp" android:text="settings" android:textColor="#FFF" />
la source
Vous pouvez utiliser la bibliothèque de composants de matériaux et le
MaterialButton
composant.Utilisez le
app:icon
etapp:iconGravity="start"
attributs .Quelque chose comme:
<com.google.android.material.button.MaterialButton style="@style/Widget.MaterialComponents.Button.Icon" app:icon="@drawable/..." app:iconGravity="start" ../>
la source
La réponse de @Liem Vo est correcte si vous utilisez android.widget.Button sans aucun remplacement. Si vous remplacez votre thème à l'aide de MaterialComponents, cela ne résoudra pas le problème.
Donc si tu es
Utiliser l' application: paramètre d' icône .
<Button android:id="@+id/bSearch" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="Search" android:textSize="24sp" app:icon="@android:drawable/ic_menu_search" />
la source