Fundo Android + texto + ícone para um botão
Gostaria de ter uma imagem definida para o fundo de um texto e um ícone no lado esquerdo do texto. Muito fácil no iPhone, mas não consigo descobrir como fazê-lo no Android, para redimensionar esse botão e manter a posição e a distância do ícone + texto corretamente.
Iphone:
Android eu tenho isso:
O código xml é:
<Button
android:id="@+id/btSettings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/tvWhatever"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:background="@drawable/bt_general"
android:drawableTop="@drawable/settings_selected"
android:text="@string/settings"
android:textColor="#000000" />
Tomou o código deAqui.
Se eu usarandroid:drawableLeft
, o ícone irá para a parte mais à esquerda.
Se eu começar a jogar com paddings semi-codificados, eu vou ter um olhar diferente em diff devives: (telefone e mesa)
Se eu adicionar oandroid:gravity="left|center_vertical"
então ficará assim:
O texto é variável: ele será alterado quando o usuário alterar o idioma.
Como fazer isso corretamente?
Eu não quero recusar a resposta de ninguém, mas por favor leia a pergunta e não sugira o que eu já tentei. Também disse que as correções codificadas não funcionam bem.
Este não é um dever de casa, mas uma parte de software comercial.
Aqui está um código sugerido das respostas:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/bt_general"
android:padding="20dip" >
<ImageView
android:id="@+id/xIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dip"
android:src="@drawable/settings_selected" />
<TextView
android:id="@+id/xSettingsTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/settings"
android:textColor="#000000" />
</RelativeLayout>
O que você acha como vai ficar parecido com oandroid:layout_marginLeft="10dip"
no Galaxy S4? Aqui está uma prévia:
Isto não é o que eu pedi. "dip" ou "dp" ou "px" não deve ser usado em qualquer lugar como a distância da esquerda, superior, porque os telefones tem HPDI, tela menor e Tablets tem resoluções largas e MDPI. Simples não funciona em mdpi e xxhdpi.
Resposta Nizam está muito perto de uma boa solução: