Views customizadas no Android — Parte 2

Thiago Pinho
Android Dev BR
Published in
3 min readFeb 24, 2016

*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!

--

--

Thiago Pinho
Android Dev BR

Desenvolvedor Android na Concrete Solutions, com grande experiência em desenvolvimento e possui mais de 12 anos de experiência em Java.