Estou tentando ter uma imagem (como plano de fundo) em um botão e adicionar dinamicamente, dependendo do que está acontecendo durante o tempo de execução, algum texto acima / acima da imagem.
Se eu usar ImageButton
, nem tenho a possibilidade de adicionar texto. Se eu usarButton
, posso adicionar texto, mas apenas definir uma imagem com android:drawableBottom
atributos XML semelhantes e como definido aqui .
No entanto, esses atributos combinam apenas texto e imagem nas dimensões x e y, o que significa que posso desenhar uma imagem em torno do meu texto, mas não abaixo / abaixo do meu texto (com o eixo z definido como saindo da tela).
Alguma sugestão de como fazer isso? Uma idéia seria estender Button
ou ImageButton
substituir o draw()
método. Mas com meu nível atual de conhecimento, eu realmente não sei como fazer isso (renderização em 2D). Talvez alguém com mais experiência saiba uma solução ou pelo menos alguns indicadores para começar?
Respostas:
Você pode chamar
setBackground()
aButton
para definir o plano de fundo do botão.Qualquer texto aparecerá acima do plano de fundo.
Se você está procurando algo semelhante no xml, existe:
android:background
attribute que funciona da mesma maneira.fonte
Para usuários que querem apenas colocar o plano de fundo, imagem de ícone e texto em um
Button
de diferentes arquivos: em umButton
plano de fundo, os atributos drawableTop / Bottom / Rigth / Left e padding .Para arranjos mais sofisticados, você também pode usar
RelativeLayout
(ou qualquer outro layout) e torná-lo clicável.Tutorial: ótimo tutorial que abrange os dois casos: http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using-relative-layout.aspx
fonte
b.setCompoundDrawablesWithIntrinsicBound(null,R.drawable.home_icon_test,null,null)
vez deandroid:drawableTop
e emb.setPadding(0,32,0,0)
vez deandroid:paddingTop
.Existe uma solução muito melhor para esse problema.
Basta pegar um normal
Button
e usardrawableLeft
osgravity
atributosDessa forma, você obtém um botão que exibe um ícone no lado esquerdo do botão e o texto no site direito do ícone centralizado na vertical .
fonte
fonte
Basta usar um LinearLayout e fingir que é uma
Button
- configuraçãobackground
e clicável é a chave:fonte
android:onClick
à sua vistaapenas substitua
com
izz um truque muito bom ..;)
fonte
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:
III Vá para os valores / pasta e abra ou crie o arquivo styles.xml e crie o seguinte código XML:
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:
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.
fonte
fonte
Você pode usar
drawableTop
(tambémdrawableLeft
etc) para a imagem e definir o texto abaixo da imagem adicionando ogravity
left|center_vertical
fonte
Atualização Importante
Para vetor desenhável
Se você estiver usando um vetor desenhável, deverá
Foi lançado na versão
1.1.0-alpha01
, portanto a versão appcompat deve ser pelo menos1.1.0-alpha01
. A versão mais recente atual é1.1.0-alpha02
, use as versões mais recentes para melhor confiabilidade, consulte as notas de versão - link .Use
AppCompatTextView
/AppCompatButton
/AppCompatEditText
app:drawableLeftCompat
,app:drawableTopCompat
,app:drawableRightCompat
,app:drawableBottomCompat
,app:drawableStartCompat
eapp:drawableEndCompat
Para drawable regular
Se você não precisar de um desenho vetorial, poderá
android:drawableLeft
,android:drawableRight
,android:drawableBottom
,android:drawableTop
TextView
,Button
&EditText
ouAppCompat
.Você pode obter resultados como abaixo -
fonte
xmlns:app="http://schemas.android.com/apk/res-auto"
namespace e não vejo essas coisas compatíveis com aplicativos.For vector drawable
ponto novamente.Provavelmente minha solução servirá para muitos usuários, espero que sim.
O que estou sugerindo é criar o TextView com seu estilo. Funciona perfeitamente para mim e possui todos os recursos, como um botão.
Antes de tudo, vamos criar o estilo do botão, que você pode usar em qualquer lugar ... Estou criando o button_with_hover.xml
Em segundo lugar, vamos criar um botão de exibição de texto.
E isso é resultado. Em seguida, estilize seu botão personalizado com todas as cores ou outras propriedades e margens. Boa sorte
fonte
http://www.mokasocial.com/2010/04/create-a-button-with-an-image-and-text-android/
fonte
Este código funciona para mim perfeitamente
fonte
Você pode usar isto:
em que eu coloquei uma imagem como
background
e também adicionei texto ..!fonte
Ou você pode programaticamente:
fonte
fonte