Ho adottato un approccio diverso da quelli qui indicati e funziona davvero bene, quindi volevo condividerlo.
Sto usando uno stile per creare un pulsante personalizzato con immagine a sinistra e testo al centro-destra. Segui i 4 "semplici passaggi" di seguito:
I. Crea le tue 9 patch utilizzando almeno 3 diversi file PNG e lo strumento che hai in: /YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch. Dopo questo dovresti avere:
button_normal.9.png, button_focused.9.png e button_pressed.9.png
Quindi scaricare o creare un'icona PNG 24x24.
ic_your_icon.png
Salva tutto nella cartella / nel tuo progetto Android.
II. Crea un file XML chiamato button_selector.xml nel tuo progetto nella cartella drawable /. Gli stati dovrebbero essere così:
<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. Vai alla cartella valori / e apri o crea il file styles.xml e crea il seguente codice XML:
<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 è uno "stile figlio" perché estende ButtonNormalText (lo "stile principale").
Nota che cambiando il drawableLeft nello stile ButtonNormalTextWithIcon, in drawableRight, drawableTop o drawableBottom puoi posizionare l'icona in un'altra posizione rispetto al testo.
IV. Vai al layout / cartella in cui hai il tuo XML per l'interfaccia utente e vai al pulsante in cui vuoi applicare lo stile e farlo apparire così:
<Button android:id="@+id/buttonSubmit"
android:text="@string/button_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/ButtonNormalTextWithIcon" ></Button>
E ... voilà! Hai il tuo pulsante con un'immagine sul lato sinistro.
Per me, questo è il modo migliore per farlo! perché in questo modo è possibile gestire le dimensioni del testo del pulsante separatamente dall'icona che si desidera visualizzare e utilizzare lo stesso sfondo disegnabile per più pulsanti con icone diverse rispettando le Linee guida dell'interfaccia utente Android utilizzando gli stili.
Puoi anche creare un tema per la tua app e aggiungere lo "stile principale" in modo che tutti i pulsanti abbiano lo stesso aspetto e applicare lo "stile figlio" con l'icona solo dove ti serve.