Views customizadas no Android — Parte 2

*Esse post foi originalmente publicado no Blog pessoal do autor

No post anterior, mostramos como criar views customizadas a partir da extensão de widget e do agrupamentos de views. Hoje, veremos como é possível definir atributos customizados e utilizá-los direto do arquivo de layout que possui a view criada.

Atributos customizados

Para possibilitar que uma view seja fácil de usar e flexível, é possível criar atributos que podem ser utilizados para configurar/customizar uma view. Para exemplificar, vamos utilizar a MoneyView, que foi criada na primeira parte do post sobre views customizadas.

Na view correspondente aos valores monetários, podemos criar atributos para definir o tamanho do texto, se a cor do texto deve ser modificada quando o valor for negativo e qual cor deve ser utilizada.

Criação dos atributos

Os atributos são declarados por meio do recurso declare-styleable, que suporta a configuração de diversos atributos. Normalmente estes recursos são inseridos no arquivo @res/values/attrs.xml.

O Android permite que o atributo seja definido com os tipos abaixo:

  • integer — números inteiros (também suporta declaração hexadecimal)
  • float — números decimais
  • fraction — percentagem, n% ou n%p (relativo ao elemento-pai), onde n deve ser um número inteiro.
  • boolean — booleano (true/false)
  • reference — referência ao resource (drawables, strings, colors, layouts, etc)
  • color — referência a uma cor
  • dimension — referência a uma dimensão (dp, sp, pt, px, mm, in)
  • string — um texto ou referência a uma string
  • enum — conjunto de valores que são aceitos

Agora que já sabemos como declarar os aspectos customizáveis, vamos à implementação.

MoneyView

O primeiro passo será criar no arquivo attrs.xml os atributos: “mv_currencySize” (tamanho da fonte da moeda), “mv_valueSize” (tamanho da fonte do valor monetário), “mv_defaultColor” (cor padrão do texto), “mv_negativeColor” (cor do texto quando o valor for negativo), “mv_value” (valor monetário) e “mv_enableChangeColor” (habilitação da mudança de cor quando o valor for negativo) da MoneyView.

Para melhor organização de código é recomendado utilizar como prefixo as iniciais da classe correspondente à view customizada, pois em um projeto é comum existir diversos atributos customizados e, desta forma, conseguimos identificar facilmente a qual view aquele atributo pertence.

O segundo passo é adicionar no construtor da view customizada a obtenção dos valores passados nos atributos.

Essa operação é realizada com o TypedArray, que consiste em um container para o array dos parâmetros da view customizada. O TypedArray é obtido pelo método obtainStyledAttributes da classe Context do Android.

Um ponto de atenção é chamar o método recycle do TypeArray para que ele seja liberado e possa ser reutilizado posteriormente.

@MoneyView.java

Para utilizar os atributos customizados no arquivo de layout (xml) é necessário declarar um namespace que será utilizado para referenciar os atributos, como: xmlns:app=”http://schemas.android.com/apk/res-auto”.

MoneyView

No exemplo acima foi definido apenas um atributo customizado: o valor, por meio do atributo mv_value. Assim, os outros atributos da view continuarão com seus valores predefinidos.

Também é possível utilizar todos os atributos correspondentes à view. Como podemos observar abaixo, serão definidos cor padrão, valor, tamanho do texto e cor do texto quando o valor é negativo.

MoneyView — Valor negativo com cor e tamanho customizado

E é isso! O projeto de exemplo pode ser encontrado neste repositório do GitHub. Ficou alguma dúvida ou tem alguma sugestão? Aproveite os campos abaixo!

Show your support

Clapping shows how much you appreciated Thiago Pinho’s story.