Saltar para conteúdo


Foto
- - - - -

Truque para poupar uma view


  • Por favor inicie sessão para responder
4 respostas a este tópico

#1 gSpot

gSpot

    Membro

  • Membros
  • PipPip
  • 43 mensagens

Mensagem publicada 26 September 2011 - 15:10

Boas.Deixo aqui uma dica, para quem quiser aproveitar, e porventura discutir.O contexto:Mostrar no Android texto a seguir a um icon (ou vice-versa).Soluçao tradicional (vou omitir o schema e tambem algumas propriedades, fica so o essencial)
<LinearLayout orientation="horizontal">	<ImageView src="@drawable/icon"/>	<TextView text="texto"/></LinearLayout>
Soluçao a la gSpot
<TextView text="texto" background="ninepatchdrawablewithicon"/>
O NinePatchDrawable é um ficheiro de imagem especial (.9.png) que permite definir áreas que encolhem ou expandem de acordo com o conteúdo onde a imagem é usada.O conceito é simples, mas muito poderoso.http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.htmlNeste caso, o meu ninepatchdrawablewithicon.9.png será composto pelo icon que quero mostrar, mais a definiçao da área que quero extender.Adicionei um attachment com um exemplo. A caixa vermelha é o icon, enquanto que as linhas pretas definem a área que deve ser extendida, caso seja necessário.Deste modo, quando mudo o tamanho do texto no TextView ou quando o texto que apresentar lá for maior, o meu icon vai manter-se sempre bem alinhado.Usando este conceito consigo usar uma View em vez de 3 Views para conseguir o meu efeito de ICON + LABEL (ou vice-versa).[attachment=4570]ninepatchdrawablewithicon.9.png[/attachment]
  • PJFonseca gosta disto

#2 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 26 September 2011 - 18:16

Ou então, sem ter que usar "manhas", usar o que a API nos oferece.Como é o caso das propriedades android:drawable{Top,Bottom,Left,Right} que metem logo o Drawable no sitio certo sem ter que andar a brincar com 9 patches ;)

#3 gSpot

gSpot

    Membro

  • Membros
  • PipPip
  • 43 mensagens

Mensagem publicada 26 September 2011 - 19:42

Correcto e afirmativo.Se for preciso usar um drawable que tambem ajuste ao conteúdo, entao o 9 patch é a solução.

#4 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 26 September 2011 - 19:46

Correcto e afirmativo.Se for preciso usar um drawable que tambem ajuste ao conteúdo entao o 9 patch é a solução.

Hummmm.... mas a ideia não é por um icon atras/frente/whatever do texto? Para isso não precisas de 9 patches.Esses são mais usados para criar themes e botões/barras, em fim, Views diferentes das que estão disponíveis nativamente. Se é mesmo só para adicionar uma imagem a um texto/botão/etc, aquela API é mesmo para isso e escusa-se de se andar a brincar com 9 patches...

#5 gSpot

gSpot

    Membro

  • Membros
  • PipPip
  • 43 mensagens

Mensagem publicada 27 September 2011 - 06:31

[attachment=4583]as3.png[/attachment]1. efeito desejado [3 views, 2 drawables se usar LinearLayout + ImageView + TextView]2. usando a API (xml: android:drawableLeft) (java: setCompoundDrawablesWithIntrinsicBounds(...)) [ 1 view, 2 drawables] nao produz o efeito desejado3. a la gSpot [1 view, 1 drawable]A nao ser que exista uma flag para colocar o drawableLeft fora do background do TextView caso se use a opçao 2. Se for o caso, manda vir, que eu desconheço e agradeço a dica!gSpot