Eu adotei uma abordagem diferente da descrita aqui e está funcionando muito bem, então eu queria compartilhá-la.
Estou usando um estilo para criar um botão personalizado com imagem à esquerda e texto no centro-direita. Basta seguir os 4 "passos fáceis" abaixo:
I. Crie seus 9 patches usando pelo menos 3 arquivos PNG diferentes e a ferramenta que você possui em: /YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch. Depois disso, você deve ter:
button_normal.9.png, button_focused.9.png e button_pressed.9.png
Em seguida, faça o download ou crie um ícone PNG 24x24.
ic_your_icon.png
Salve tudo na pasta drawable / no seu projeto Android.
II Crie um arquivo XML chamado button_selector.xml no seu projeto na pasta drawable /. Os estados devem ser assim:
<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 Vá para os valores / pasta e abra ou crie o arquivo styles.xml e crie o seguinte código 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 é um "estilo filho" porque está estendendo o ButtonNormalText (o "estilo pai").
Observe que, alterando o drawableLeft no estilo ButtonNormalTextWithIcon, para drawableRight, drawableTop ou drawableBottom, você pode colocar o ícone em outra posição em relação ao texto.
IV Vá para o layout / pasta em que você possui seu XML para a interface do usuário e vá para o botão em que deseja aplicar o estilo e faça com que fique assim:
<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à! Você conseguiu o seu botão com uma imagem no lado esquerdo.
Para mim, esta é a melhor maneira de fazê-lo! porque dessa maneira, você pode gerenciar o tamanho do texto do botão separadamente do ícone que deseja exibir e usar o mesmo plano de fundo desenhável para vários botões com ícones diferentes, respeitando as Diretrizes da interface do usuário do Android usando estilos.
Você também pode criar um tema para o seu aplicativo e adicionar o "estilo pai" a ele, para que todos os botões tenham a mesma aparência e aplicar o "estilo filho" com o ícone somente onde for necessário.