J'ai adopté une approche différente de celles énoncées ici, et cela fonctionne très bien, j'ai donc voulu la partager.
J'utilise un style pour créer un bouton personnalisé avec l'image à gauche et le texte au centre à droite. Suivez simplement les 4 "étapes faciles" ci-dessous:
I. Créez vos 9 patchs en utilisant au moins 3 fichiers PNG différents et l'outil que vous avez sur: /YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch. Après cela, vous devriez avoir:
button_normal.9.png, button_focused.9.png et button_pressed.9.png
Ensuite, téléchargez ou créez une icône PNG 24x24.
ic_your_icon.png
Enregistrez tout dans le dossier drawable / de votre projet Android.
II. Créez un fichier XML appelé button_selector.xml dans votre projet sous le dossier drawable /. Les états devraient être comme ceci:
<item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/button_focused" />
<item android:drawable="@drawable/button_normal" />
III. Accédez au dossier values / et ouvrez ou créez le fichier styles.xml et créez le code XML suivant:
<style name="ButtonNormalText" parent="@android:style/Widget.Button">
<item name="android:textColor" >@color/black</item>
<item name="android:textSize" >12dip</item>
<item name="android:textStyle" >bold</item>
<item name="android:height" >44dip</item>
<item name="android:background" >@drawable/button_selector</item>
<item name="android:focusable" >true</item>
<item name="android:clickable" >true</item>
</style>
<style name="ButtonNormalTextWithIcon" parent="ButtonNormalText">
<item name="android:drawableLeft" >@drawable/ic_your_icon</item>
</style>
ButtonNormalTextWithIcon est un "style enfant" car il étend ButtonNormalText (le "style parent").
Notez que la modification de drawableLeft dans le style ButtonNormalTextWithIcon, en drawableRight, drawableTop ou drawableBottom vous pouvez placer l'icône dans une autre position par rapport au texte.
IV. Accédez à la mise en page / dossier où vous avez votre XML pour l'interface utilisateur et allez au bouton où vous souhaitez appliquer le style et le faire ressembler à ceci:
<Button android:id="@+id/buttonSubmit"
android:text="@string/button_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/ButtonNormalTextWithIcon" ></Button>
Et ... voilà! Vous avez obtenu votre bouton avec une image sur le côté gauche.
Pour moi, c'est la meilleure façon de le faire! car en procédant de cette façon, vous pouvez gérer la taille du texte du bouton séparément de l'icône que vous souhaitez afficher et utiliser le même arrière-plan que vous pouvez dessiner pour plusieurs boutons avec des icônes différentes en respectant les directives de l'interface utilisateur Android à l'aide de styles.
Vous pouvez également créer un thème pour votre application et y ajouter le "style parent" pour que tous les boutons se ressemblent et appliquer le "style enfant" avec l'icône uniquement là où vous en avez besoin.