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”.
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.
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!