Tutorial Android Customizando Componentes
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
1
Aviso sobre este <strong>Tutorial</strong><br />
Antes de iniciar a leitura deste material, veja esses avisos importantes:<br />
Esse material NÃO PODERÁ SER DISTRIBUÍDO, em hipótese alguma, em<br />
outros sites da Internet ou através outros processos/meios .<br />
Essa material , em hipótese alguma, NÃO PODE SER COMERCIALIZADO<br />
tanto pela Internet ou de forma impressa.<br />
Se por acaso você ver este material sendo distribuído em outro site ou sendo<br />
comercializado (sem ser pelo site oficial da apostila), por favor, entre em<br />
contato com o autor (ver e-mail na primeira página).<br />
2
Sobre o Autor do <strong>Tutorial</strong><br />
Luciano Alves da Silva é Bacharelado em Ciência da Computação pela<br />
UNISUAM (Rio de Janeiro – RJ) e Pós-Graduado em Docência do Ensino<br />
Superior pelo Instituto A Vez do Mestre (Universidade Cândido Mendes –<br />
UCAM, no Rio de Janeiro). Possui conhecimento e domínio das linguagens de<br />
programação Pascal, Java, C/C++, C#, Visual Basic, Delphi, PHP e HTML. Já<br />
criou Ambientes de Desenvolvimento Integrado (conhecidos como IDE) como o<br />
MakeWare (que trabalha com as linguagens Pascal, C++ e Java) e o AlgoWare<br />
(interpretador de algoritmos).<br />
É autor também dos seguintes livros, pela editora AGBOOK<br />
<br />
Aprenda Passo a Passo a Programar em <strong>Android</strong> – Guia Essencial<br />
para Desenvolvedores<br />
Desenvolvendo Jogos com a Plataforma XNA – Guia para<br />
Desenvolvedores.<br />
<br />
Desenvolvendo Jogos com a Ferramenta RPG Maker VX– Guia do<br />
Usuário.<br />
3
Apresentação<br />
Este material mostra passo a passo como customizar um componente, ou seja,<br />
aplicar um novo estilo visual ao nosso componente .<br />
Caso você, que esteja lendo este tutorial, seja iniciante em programação com<br />
<strong>Android</strong>, recomendo antes adquirir no site oficial a “Apostila de <strong>Android</strong><br />
Programação Básica 6ª Edição” (em meu site www.apostilaandroid.net), para<br />
melhor compreensão e entendimento dos comandos e instruções utilizadas<br />
para o desenvolvimento da aplicação.<br />
4
<strong>Tutorial</strong> <strong>Customizando</strong> um<br />
componente (Aplicando Estilos)<br />
A<br />
s aplicações que desenvolvemos para a plataforma <strong>Android</strong> são<br />
formadas pelos seus componentes (também conhecidos como<br />
“widgets”). Cada componente possui seu estilo e visual padrão. Hoje em<br />
dia há uma grande necessidade, pela a maioria dos programadores, em<br />
customizar os componentes de uma aplicação para dar aquele visual “estiloso”<br />
e “chamativo”. Neste tutorial iremos aprender como customizar os<br />
componentes de uma aplicação <strong>Android</strong>.<br />
O arquivo styles.xml<br />
O “styles.xml” é um arquivo do <strong>Android</strong> responsável pelo tratamento de<br />
aplicação de estilos à componentes de um programa. Esse arquivo fica<br />
sempre presente dentro do diretório “values” (que fica dentro da pasta “res” de<br />
um projeto em <strong>Android</strong>). Dentro do arquivo “styles.xml” normalmente temos a<br />
seguinte estrutura:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
5
É dentro desse arquivo que definimos nossos estilos (através de estruturas<br />
XML) que iremos aplicar a um ou a um grupo de componentes que desejamos<br />
personalizar.<br />
<strong>Customizando</strong> componentes<br />
Para o desenvolvimento do nosso sistema estarei utilizando a ferramenta<br />
<strong>Android</strong> Developer Tools (ou simplesmente ADT). Para começarmos o nosso<br />
aprendizado vamos criar um novo projeto dentro do ADT , de acordo com as<br />
informações a seguir :<br />
Application Name: AplicandoEstilos<br />
Project Name: AplicandoEstilos<br />
Package Name : com.example.aplicandoestilos<br />
Minimum Required SDK : API 14: <strong>Android</strong> 4.0 (Ice Cream Sandwich)<br />
Caixa de diálogo – New <strong>Android</strong> Application<br />
6
Feito isso pressione a tecla “Next” para confirmamos as informações. Agora<br />
avance as telas (simplesmente pressionando “Next” nas próximas telas) até<br />
chegar na seguinte caixa de diálogo :<br />
Caixa de diálogo – New <strong>Android</strong> Application<br />
Agora vamos digitar as seguintes informações nos campos abaixo :<br />
Activity Name: AplicacaoActivity<br />
Layout Name: activity_textview_personalizado<br />
Depois disso é só clicarmos em “Finish” para gerarmos um novo projeto.<br />
Depois de criarmos o nosso projeto vamos alterar a estrutura de Layout da<br />
nossa tela indo na seção “Outline” (situado no lado direito da tela) e no item<br />
(estrutura) RelativeLayout vamos clicar com botão direito do mouse e em<br />
seguida vamos selecionar a opção “Change Layout”, conforme você confere<br />
em seguida :<br />
7
Alterando a estrutura de layout<br />
Na caixa de diálogo que será aberta, na campo “New Layout Type” vamos<br />
escolher a opção “LinearLayout (Vertical)”, conforme você confere em seguida :<br />
Caixa de diálogo – Change Layout<br />
Depois disso clique em “Finish” para alterarmos a estrutura. Vejamos o<br />
resultado:<br />
8
Estrutura da tela alterada<br />
<strong>Customizando</strong> uma TextView<br />
A partir de agora iremos começar “customizando” um componente em<br />
particular (neste caso , o componente TextView).<br />
O componente TextView é aquele componente que funciona como uma Label<br />
(também conhecido como “rótulo”) onde podemos exibir uma informação.<br />
Iremos agora aprender a customizá-lo de acordo com a nossa necessidade.<br />
Quando criamos um projeto, por padrão, temos um componente do tipo<br />
TextView com a frase “Hello World”. Vamos alterar o texto desse componente<br />
, com o seguinte conteúdo: “TextView de estilo padrão”. O resultado você<br />
confere a seguir:<br />
9
Conteúdo alterado<br />
Agora vamos abrir o arquivo “styles.xml” para dentro de sua estrutura XML<br />
digitarmos o seguinte código destacado em azul:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
#ffffff<br />
25sp<br />
#00bff3<br />
<br />
<br />
Bom , agora irei explicar passo a passo a estrutura XML adicionada acima.<br />
Cada estilo que adicionamos possui um nome, como podemos conferir na linha<br />
abaixo:<br />
10
Pelo nome que atribuímos ao estilo, indicamos que ele irá pertencer a um<br />
componente do tipo TextView (embora esse estilo possa pertencer a qualquer<br />
tipo de componente que seja, desde que as propriedades especificadas<br />
existam no(s) componente(s) que desejamos personalizar).<br />
Dentro da estrutura temos os seguintes atributos :<br />
#ffffff<br />
25sp<br />
#00bff3<br />
Cada atributo acima está associado a uma determinada propriedade do<br />
componente que queremos alterar. Dentro da primeira tag definimos um<br />
argumento “name” que possui o conteúdo “android:textColor”. Um componente<br />
TextView possui um atributo XML do tipo android:textColor onde através dele<br />
modificamos a cor de texto, e essa tag possui o valor “#ffffff” que indica<br />
que a cor do texto será totalmente branco.<br />
Na segunda tag definimos um parâmetro “name” cujo conteúdo é<br />
“android:textSize” , que indica que iremos modificar o tamanho do nosso texto.<br />
O valor presente dentro dessa segunda tag é “25sp”, que indica o tamanho do<br />
nosso texto.<br />
Na terceira tag definimos um parâmetro “name” cujo conteúdo é<br />
“android:background” , que indica que iremos modificar o cor de fundo do<br />
nosso texto. O valor presente dentro dessa segunda tag é “#00bff3”, que indica<br />
a cor de fundo de nosso texto (que é praticamente um azul claro).<br />
Depois de alterar o arquivo “styles.xml” conforme foi solicitado acima, salve as<br />
modificações.<br />
Agora vamos abrir o arquivo “activity_textview_personalizado.xml” e dentro da<br />
tela da nossa aplicação vamos arrastar um componente do tipo TextView e em<br />
seguida altere as seguintes propriedades:<br />
11
TextView<br />
Propriedade<br />
Valor<br />
Text Texto Personalizado 1<br />
Style @style/MyTextViewStyle1<br />
Eis o resultado:<br />
TextView Customizada<br />
Ficou muito legal não é mesmo ? Vamos agora novamente dentro do arquivo<br />
“styles.xml” para adicionarmos o seguinte código destacado em azul :<br />
<br />
<br />
:<br />
<br />
#fff200<br />
30sp<br />
#f7941d<br />
10dp <br />
10dp <br />
<br />
<br />
#ffffff<br />
20sp<br />
#fb423e<br />
300dp<br />
center<br />
<br />
<br />
12
Agora vamos voltar para o arquivo “activity_textview_personalizado.xml” e<br />
dentro da tela da nossa aplicação vamos arrastar os seguintes componentes :<br />
TextView<br />
Propriedade<br />
Valor<br />
Text Texto Personalizado 2<br />
Style @style/MyTextViewStyle2<br />
TextView<br />
Propriedade<br />
Valor<br />
Text Texto Personalizado 3<br />
Style @style/MyTextViewStyle3<br />
Eis o resultado:<br />
<strong>Componentes</strong> customizados<br />
Executando a nossa aplicação teremos o seguinte resultado:<br />
13
Aplicação com componentes personalizados<br />
Nossa pequena demonstração que criamos ficou com uma cara mais<br />
personalizada não é mesmo ??? Isso ainda é o inicio. Iremos aprender a<br />
customizar mais componentes para enriquecemos a aparência de nossas<br />
aplicações <strong>Android</strong> daqui para frente.<br />
<strong>Customizando</strong> uma EditText<br />
Agora iremos aprender passo a passo a customizar um componente do tipo<br />
EditText. Para isso primeiramente, vamos criar um arquivo XML dentro da<br />
pasta “layout” chamado “edittext_personalizado.xml”.<br />
Depois de criar o arquivo XML vamos alterar as seguintes propriedades da<br />
estrutura LinearLayout<br />
14
LinearLayout<br />
Propriedade<br />
Background<br />
Valor<br />
#ffe4c4<br />
Se nós observarmos a tela de nossa aplicação, observe que ela ficou com uma<br />
cor de fundo completamente diferente.<br />
Agora vamos adicionar os seguintes componentes na sequencia:<br />
TextView (Large Text)<br />
Propriedade<br />
Text<br />
Valor<br />
Digite seu nome:<br />
EditText<br />
Propriedade<br />
Id<br />
Valor<br />
ednome<br />
TextView (Large Text)<br />
Propriedade<br />
Text<br />
Valor<br />
Digite seu telefone:<br />
EditText<br />
Propriedade<br />
Id<br />
Valor<br />
edtelefone<br />
TextView (Large Text)<br />
Propriedade<br />
Text<br />
Valor<br />
Digite seu email:<br />
15
EditText<br />
Propriedade<br />
Id<br />
Valor<br />
edemail<br />
Eis o resultado:<br />
<strong>Componentes</strong> inseridos<br />
Agora vamos criar um estilo “personalizado” para o nosso componente<br />
EditText, porém, para este exemplo, NÃO VAMOS USAR o arquivo<br />
“styles.xml”, iremos criar um arquivo XML próprio para o nosso componente.<br />
Vamos criar agora nosso primeiro estilo “personalizado” (em XML) para o<br />
nosso componente EditText, para isso, vamos clicar com o botão direito do<br />
mouse sobre o diretório “res” do nosso e em seguida selecione a opção “New” /<br />
“<strong>Android</strong> XML File”. Feito isso será aberta a seguinte caixa de diálogo:<br />
16
Caixa de diálogo – <strong>Android</strong> XML File<br />
No campo “Resource Type” vamos escolher a opção “Drawable”, e em seguida<br />
na lista “Root Elements”, vamos escolher a opção “Shape” (Forma). Feito isso,<br />
no campo “File” vamos digitar o nome do nosso arquivo que será<br />
“mycustomedittext1” (não precisa colocar a extensão “.xml”, isso já será feito<br />
automaticamente). Feito isso basta clicar em “Finish” para que o arquivo seja<br />
gerado. Vejamos o resultado:<br />
17
Arquivo gerado com sucesso<br />
Se observarmos acima, foi criado um diretório “drawable” para o nosso arquivo<br />
de estilo que geramos.<br />
Agora dentro do arquivo gerado, vamos escrever o seguinte código destacado<br />
em azul:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
18
Vou explicar agora o objeto de cada tag da estrutura acima.<br />
A tag , que é a tag principal, indica que o que iremos criar é uma<br />
forma. A nossa forma será um retângulo, definido através do parâmetro<br />
“android:shape”, conforme podemos conferir no abaixo:<br />
<br />
A tag que vem em seguida é , ela é responsável por definir a cor de<br />
fundo do nosso componente EditText, que por padrão será “amarelo”. Veja o<br />
código:<br />
<br />
Logo em seguida temos a tag , que é responsável por definir o<br />
“contorno” da nossa forma. Nós utilizamos essa tag para deixar os contornos<br />
do nosso componente mais “arredondados”, através do parâmetro<br />
“android:radius”. Veja o código abaixo:<br />
<br />
Em seguida temos a tag que utilizamos para definir as bordas do<br />
nosso componente. Aqui nessa tag definimos a cor da borda e sua largura.<br />
Veja o código abaixo:<br />
<br />
E por ultimo temos a tag (muito conhecida), que utilizamos para<br />
definirmos os espaçamentos de forma geral. Eis o código da tag:<br />
<br />
Agora vamos voltar para o arquivo “editext_personalizada.xml” para em<br />
seguida alterarmos as seguintes propriedades dos componentes abaixo:<br />
19
EditText (ednome)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext1<br />
EditText (edtelefone)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext1<br />
EditText (edemail)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext1<br />
Eis o resultado:<br />
<strong>Componentes</strong> alterados<br />
Executando a nossa aplicação teremos o seguinte resultado:<br />
20
Criando fundo gradiente<br />
Aplicação customizada em execução<br />
Até agora aprendemos a criar um fundo de cor única para o nosso componente<br />
EditText. Neste tópico iremos aprender como criar um fundo no estilo<br />
gradiente para o nosso componente.<br />
Para começarmos, vamos clicar com o botão direto do mouse sobre a pasta<br />
“res” e em seguida selecione a opção “New” / “<strong>Android</strong> XML File”.<br />
Na caixa de diálogo que aparece, selecione no campo “Resource Type” a<br />
opção “Drawable”. E em seguida na lista “Root Elements” vamos escolher a<br />
opção “Shape”. Feito isso, no campo “File” vamos digitar o nome do nosso<br />
arquivo que será “mycustomedittext2”. Feito isso basta clicar em “Finish” para<br />
que o arquivo seja gerado.<br />
Depois de o arquivo ser gerado, digite o seguinte código :<br />
21
<br />
<br />
<br />
<br />
<br />
Se observamos o código acima, estamos usando agora um tag chamada<br />
, que é responsável por definir uma cor de gradiente para o nosso<br />
componente. Nessa tag informações os seguintes parâmetros:<br />
android:startColor: Aqui definimos a cor inicial do nosso componente,<br />
que no exemplo acima é uma cor amarela.<br />
android:endColor: Aqui definimos a cor final do nosso componente, que<br />
no exemplo acima é uma cor laranja.<br />
android:angle: Aqui definimos o ângulo de ocorrência do gradiente, que<br />
neste exemplo usamos o valor 270 (isso indica que a variação de cor<br />
começa de cima para baixo).<br />
Agora vamos voltar para o arquivo “edittext_personalizada.xml” para alterarmos<br />
as propriedades dos seguintes componentes:<br />
EditText (ednome)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext2<br />
22
EditText (edtelefone)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext2<br />
EditText (edemail)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext2<br />
Eis o resultado:<br />
<strong>Componentes</strong> alterados<br />
Vejamos o resultado da execução na figura seguinte:<br />
23
Aplicação customizada em execução<br />
Modificando cor de acordo com comportamento (em foco, sem foco e<br />
pressionado)<br />
Todos os dois exemplos de customização do componente EditText possuem<br />
algo em comum : eles sempre mantém os componentes com cores fixas,<br />
independente do comportamento que ocorrem neles.<br />
É muito comum trabalharmos com cores diferentes em componente quando ele<br />
sofre algum tipo de comportamento (como por exemplo: quando ele está em<br />
foco, quando ele perde o foco e quando ele está pressionado).<br />
Aqui neste exemplo vamos aprender a exibir cores diferentes para um<br />
determinado comportamento do componente.<br />
Cada formatação para o comportamento do componente vai estar em um<br />
arquivo em separado (ou seja, iremos tratar 3 comportamentos, logo, teremos<br />
três arquivos XML de formatação para cada comportamento).<br />
24
Vamos começar criando o primeiro arquivo de formação indo no diretório “res”,<br />
clicando com o botão direito do mouse sobre ele para logo mais selecionar a<br />
opção “New” / “<strong>Android</strong> XML File”.<br />
Na caixa de diálogo que aparece, selecione no campo “Resource Type” a<br />
opção “Drawable”. E em seguida na lista “Root Elements” vamos escolher a<br />
opção “Shape”. Feito isso, no campo “File” vamos digitar o nome do nosso<br />
arquivo que será “mycustomedittext3_normal”. Feito isso basta clicar em<br />
“Finish” para que o arquivo seja gerado.<br />
Agora vamos digitar o seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
Repetindo o mesmo processo vamos criar um arquivo chamado<br />
“mycustomedittext3_focused” com o seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
25
Agora vamos criar um arquivo chamado “mycustomedittext3_pressed” com o<br />
seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
Agora vamos no diretório “res”, clicando com o botão direito do mouse sobre<br />
ele para logo mais selecionar a opção “New” / “<strong>Android</strong> XML File”.<br />
Na caixa de diálogo que aparece, selecione no campo “Resource Type” a<br />
opção “Drawable”. E em seguida na lista “Root Elements”, agora VAI SER<br />
DIFERENTE, vamos escolher a opção “Seletor”. Feito isso, no campo “File”<br />
vamos digitar o nome do nosso arquivo que será “mycustomedittext3”. Feito<br />
isso basta clicar em “Finish” para que o arquivo seja gerado.<br />
Depois disso vamos digitar o seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
26
Irei explicar agora a estrutura que criamos agora.<br />
Observe que agora estamos trabalhando com uma estrutura chamada<br />
“selector” (através da tag ), que é responsável por aplicar<br />
formatações de acordo com um comportamento do componente. Dentro da<br />
estrutura “selector” existem três tags , onde cada uma irá executar<br />
mediante um comportamento do componente.<br />
A primeira tag irá aplicar a formatação do componente caso o mesmo<br />
possua foco, através do parâmetro “android:state_focused=true”. Caso o foco<br />
esteja presente no componente , a aplicação da formatação é executada, por<br />
meio do parâmetro<br />
“android:drawable=@drawable/mycustomedittext3_focused”. Veja o código :<br />
<br />
A segunda tag irá aplicar a formatação do componente caso o mesmo<br />
for “tocado” (pressionado), através do parâmetro “android:state_pressed=true”.<br />
Caso o componente for tocado, a aplicação da formatação é executada, por<br />
meio do parâmetro<br />
“android:drawable=@drawable/mycustomedittext3_pressed”. Veja o código :<br />
<br />
A terceira tag irá aplicar a formatação normal do componente , por meio<br />
do parâmetro “android:drawable=@drawable/mycustomedittext3_normal”. Veja<br />
o código :<br />
<br />
OBS: A tag referente à formatação normal do componente sempre deve<br />
ser a última e ser adicionada.<br />
Voltando para o arquivo “editext_personalizada.xml” vamos realizar as<br />
seguintes alterações nos componentes abaixo:<br />
27
EditText (ednome)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext3<br />
EditText (edtelefone)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext3<br />
EditText (edemail)<br />
Propriedade<br />
Background<br />
Valor<br />
@drawable/mycustomedittext3<br />
Eis o resultado:<br />
<strong>Componentes</strong> alterados<br />
Executando a aplicação , teremos o seguinte resultado abaixo:<br />
28
Aplicação customizada em execução (foco no campo e-mail)<br />
<strong>Customizando</strong> um Button<br />
Neste tópico iremos aprender a como “customizar” um componente do tipo<br />
Button em nossa aplicação. Primeiramente, dentro do diretório “layout” vamos<br />
criar um novo arquivo XML (<strong>Android</strong> XML File) chamado<br />
“button_personalizado.xml”.<br />
Depois disso copie todas as imagens que acompanham este material (que<br />
estão disponíveis na mesma página de download deste material) para dentro<br />
do diretório “drawable-mdpi”.<br />
Agora dentro do código XML copie e cole o código da tela:<br />
29
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
android:paddingTop="10dp"<br />
android:text="Login:"<br />
android:textAppearance="?android:attr/textAppearanceLarge"<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Feito isso teremos o seguinte resultado:<br />
31
Tela da nossa aplicação<br />
Observe que na tela acima temos um sistema de login e senha onde temos os<br />
botões “Entrar” e “Sair do Sistema”. Por padrão, as cores do botão são cinza,<br />
mas, gostaria de colocá-los na cor azul. Para isso vamos criar um novo estilo<br />
dentro do arquivo “styles.xml” chamado “botao_azul”. Dentro da estrutura XML<br />
do arquivo “styles.xml” vamos digitar o seguinte código destacado em azul:<br />
<br />
:<br />
<br />
#ffffff<br />
20sp<br />
@drawable/botao_azul_normal<br />
<br />
<br />
Agora vamos voltar para o arquivo “button_personalizado.xml” para em seguida<br />
alterarmos as propriedades dos seguintes componentes:<br />
32
Button (btentrar)<br />
Propriedade<br />
Style<br />
Valor<br />
@style/botão_azul<br />
Button (btsair_sistema)<br />
Propriedade<br />
Style<br />
Valor<br />
@style/botão_azul<br />
Eis o resultado:<br />
Tela da nossa aplicação – Botões modificados<br />
Executando a aplicação teremos o seguinte resultado:<br />
33
Aplicação em execução<br />
Quando clicamos no botão, se observamos, não ocorre nenhuma variação de<br />
cor devido a mudança de comportamento (quando ele passa a ser<br />
pressionado). Vamos fazer agora que o botão mude de cor toda vez que<br />
pressionarmos nele. Para isso vamos dentro da pasta “res” presente em seu<br />
projeto e em seguida selecione “New” / “<strong>Android</strong> XML File”. Vamos criar um<br />
arquivo XML chamado “botao_azul_selector.xml” dentro da pasta “drawable<br />
(selecionando em “Resource type” a opção “Drawable”) com uma estrutura do<br />
tipo “selector”. Feito isso vamos digitar o código em seguida:<br />
<br />
<br />
<br />
<br />
<br />
34
Agora dentro da estrutura “botao_azul” presente no arquivo “styles.xml”, vamos<br />
substituir o código estacado em vermelho abaixo:<br />
<br />
#ffffff<br />
20sp<br />
<br />
<br />
@drawable/botao_azul_normal<br />
Pelo seguinte código azul:<br />
<br />
#ffffff<br />
20sp<br />
<br />
<br />
@drawable/botao_azul_selector<br />
Agora execute novamente a aplicação e experimente clicar no botão para ver<br />
se o mesmo mudou de cor quando pressionado. Veja na figura seguinte:<br />
35
Aplicação em execução – Botão Entrar pressionado<br />
<strong>Customizando</strong> um CheckBox e RadioButton<br />
Neste tópico agora iremos aprender a criar um RadioButton e um CheckBox<br />
customizados.<br />
Para isso vamos criar um arquivo de layout XML (dentro da pasta “layout”)<br />
chamado “radiobutton_checkbox_personalizado.xml”. Em seguida vamos<br />
copiar e colar o seguinte código XML dentro dele:<br />
<br />
<br />
<br />
android:layout_height="72dp"<br />
android:src="@drawable/logo_enquete" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="Java" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content" ><br />
<br />
<br />
<br />
<br />
<br />
<br />
Eis o resultado:<br />
39
Tela da aplicação<br />
Se nós observarmos a tela da aplicação acima, os componentes do tipo<br />
RadioButton e CheckBox estão em sua formatação padrão. Vamos<br />
customizar nossos componentes de acordo com os passos abaixo.<br />
Primeiramente vamos criar dentro do diretório “drawable” um arquivo XML<br />
chamado “checkbox_selector.xml” com o seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
40
Irei comentar o código acima. Na tag da estrutura acima nós temos<br />
duas estruturas do tipo “item”. A primeira estrutura representada pela tag<br />
irá executar quando a CheckBox estiver marcada, através do<br />
parâmetro “android:state_checked=true". Vejamos o código abaixo:<br />
<br />
A segunda estrutura representada pela tag irá executar quando a<br />
CheckBox estiver desmarcada, através do parâmetro<br />
“android:state_checked=false". Vejamos o código abaixo:<br />
<br />
Agora vamos mais um arquivo XML dentro do diretório “drawable” chamado<br />
“radiobutton_selector.xml” com o seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Agora dentro do arquivo “styles.xml” vamos adicionar as seguintes estruturas<br />
destacadas em azul abaixo:<br />
<br />
:<br />
<br />
5dp<br />
<br />
@drawable/checkbox_selector<br />
<br />
<br />
5dp<br />
<br />
@drawable/radiobutton_selector<br />
<br />
:<br />
<br />
41
Agora vamos alterar as seguintes propriedades dos componentes abaixo:<br />
Todas as CheckBoxs<br />
Propriedade<br />
Style<br />
Layout Height<br />
Valor<br />
@style/MyCheckBox<br />
34dp<br />
Todas as RadioButtons<br />
Propriedade<br />
Style<br />
Layout Height<br />
Valor<br />
@style/MyRadioButtons<br />
34dp<br />
Eis o resultado:<br />
Tela da aplicação – <strong>Componentes</strong> Alterados<br />
42
Executando a nossa aplicação podemos conferir o seguinte resultado:<br />
Aplicação em Execução<br />
<strong>Customizando</strong> uma ListView<br />
Agora neste tópico vamos aprender a customizar uma ListView de forma a<br />
utilizar em uma aplicação de acordo com nossas necessidades.<br />
Diferentemente dos componentes customizados anteriormente, aqui iremos<br />
fazer uso , além dos arquivos XML, de programação com código Java para a<br />
aplicação da customização do componente.<br />
Para começarmos vamos criar um arquivo XML dentro do diretório “layout”<br />
chamado “listview_personalizada.xml”, e dentro do arquivo vamos colocar o<br />
seguinte código XML, como segue:<br />
43
<br />
<br />
<br />
/><br />
Eis o resultado:<br />
Tela da aplicação<br />
Aqui iremos customizar a nossa ListView de forma que o componente, aos<br />
invés de aceitar uma linha por item de lista, irá aceitar múltiplas linhas (que<br />
aqui no caso 2 linhas onde na primeira será mostrada o nome, e na segunda<br />
linha será exibida o telefone , seguido do email), incluindo um ícone.<br />
Para isso, vamos começar definindo o layout de nossa linha que irá exibir as<br />
informações. Para isso vamos criar dentro do diretório “layout” um arquivo XML<br />
chamado “custom_row_listview.xml” , com o seguinte código abaixo:<br />
<br />
<br />
android:layout_height="72dp"<br />
android:scaleType="fitXY"<br />
android:src="@drawable/icone_contato" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
O resultado produzido pelo código acima nos dará a seguinte formatação para<br />
a nossa linha da ListView:<br />
Layout personalizado da linha da ListView<br />
46
Agora vamos criar uma classe chamada ContatoInfo dentro do diretório “src”<br />
(presente dentro do pacote “com.example.aplicandoestilos”, com o seguinte<br />
código abaixo:<br />
package com.example.aplicandoestilos;<br />
public class ContatoInfo {<br />
private String nome;<br />
private String telefone;<br />
private String email;<br />
public void setNome(String n) {<br />
nome = n;<br />
}<br />
public void setTelefone(String t) {<br />
telefone = t;<br />
}<br />
public void setEmail(String e) {<br />
email = e;<br />
}<br />
public String getNome() {<br />
return nome;<br />
}<br />
public String getTelefone() {<br />
return telefone;<br />
}<br />
}<br />
public String getEmail() {<br />
return email;<br />
}<br />
Essa classe será responsável por guardar e armazenar as informações que<br />
serão exibidas na linha da ListView “personalizada”.<br />
Dentro do mesmo pacote, vamos criar uma classe chamada<br />
MyCustomRowBaseAdapter com o seguinte código abaixo:<br />
package com.example.aplicandoestilos;<br />
import java.util.ArrayList;<br />
import android.content.Context;<br />
import android.view.LayoutInflater;<br />
import android.view.View;<br />
import android.view.ViewGroup;<br />
import android.widget.BaseAdapter;<br />
47
import android.widget.TextView;<br />
public class MyCustomRowBaseAdapter extends BaseAdapter {<br />
private static ArrayList contatoInfoArrayList;<br />
private LayoutInflater mInflater;<br />
public MyCustomRowBaseAdapter (Context context,<br />
ArrayList contatoInfo) {<br />
contatoInfoArrayList = contatoInfo;<br />
mInflater = LayoutInflater.from(context);<br />
}<br />
@Override<br />
public int getCount() {<br />
return contatoInfoArrayList.size();<br />
}<br />
@Override<br />
public Object getItem(int position) {<br />
return contatoInfoArrayList.get(position);<br />
}<br />
@Override<br />
public long getItemId(int position) {<br />
return position;<br />
}<br />
@Override<br />
public View getView(int position, View convertView, ViewGroup<br />
parent) {<br />
ViewHolder holder;<br />
if (convertView == null) {<br />
convertView = mInflater.inflate<br />
(R.layout.custom_row_listview, null);<br />
holder = new ViewHolder();<br />
holder.txtNome = (TextView) convertView.<br />
findViewById(R.id.txtNome);<br />
holder.txtTelefone = (TextView) convertView.<br />
findViewById(R.id.txtTelefone);<br />
holder.txtEmail = (TextView) convertView.<br />
findViewById(R.id.txtEmail);<br />
convertView.setTag(holder);<br />
} else {<br />
holder = (ViewHolder) convertView.getTag();<br />
}<br />
holder.txtNome.<br />
setText(contatoInfoArrayList.get(position).getNome());<br />
48
holder.txtTelefone.<br />
setText(contatoInfoArrayList.get(position).getTelefone());<br />
holder.txtEmail.<br />
setText(contatoInfoArrayList.get(position).getEmail());<br />
}<br />
return convertView;<br />
static class ViewHolder {<br />
TextView txtNome;<br />
TextView txtTelefone;<br />
TextView txtEmail;<br />
}<br />
}<br />
Essa classe será responsável por formatar a linha da ListView utilizando como<br />
“layout” personalizado o arquivo XML que criamos, o<br />
“custom_row_listview.xml”, além de guardar e exibir as informações.<br />
Para demonstrarmos o uso do componente ListView “personalizado”, vamos<br />
digitar o seguinte código dentro do arquivo “AplicacaoActivity.java”:<br />
package com.example.aplicandoestilos;<br />
import java.util.ArrayList;<br />
import android.os.Bundle;<br />
import android.app.Activity;<br />
import android.view.Menu;<br />
import android.widget.ListView;<br />
public class AplicacaoActivity extends Activity {<br />
ListView lstcontatos;<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.listview_personalizada);<br />
lstcontatos = (ListView) findViewById(R.id.lstcontatos);<br />
ArrayList contatoInfoArray = new<br />
ArrayList();<br />
ContatoInfo cInfo = new ContatoInfo();<br />
cInfo.setNome("Luciano Alves");<br />
49
cInfo.setTelefone("(21) - 1111-1111");<br />
cInfo.setEmail("lucianopascal@yahoo.com.br");<br />
contatoInfoArray.add(cInfo);<br />
cInfo = new ContatoInfo();<br />
cInfo.setNome("David Soares");<br />
cInfo.setTelefone("(21) - 2222-2222");<br />
cInfo.setEmail("david@live.com");<br />
contatoInfoArray.add(cInfo);<br />
cInfo = new ContatoInfo();<br />
cInfo.setNome("Amanda de Lima");<br />
cInfo.setTelefone("(21) - 3333-3333");<br />
cInfo.setEmail("amanda@gmail.com");<br />
contatoInfoArray.add(cInfo);<br />
lstcontatos.setAdapter(new MyCustomRowBaseAdapter(this,<br />
contatoInfoArray));<br />
}<br />
}<br />
Irei explicar agora algumas linhas de código da classe acima. Para exibir as<br />
informações dentro da nossa ListView “personalizada” será preciso inserir as<br />
informações dentro do componente. Para isso foi preciso criar um ArrayList<br />
que irá guardar as informações que estarão “estruturas” dentro da classe<br />
ContatoInfo. Veja o código abaixo:<br />
ArrayList contatoInfoArray = new<br />
ArrayList();<br />
Nas instruções seguintes carregamos o nosso ArrayList com as informações a<br />
serem exibidas na ListView, como mostra o código a seguir:<br />
ContatoInfo cInfo = new ContatoInfo();<br />
cInfo.setNome("Luciano Alves");<br />
cInfo.setTelefone("(21) - 1111-1111");<br />
cInfo.setEmail("lucianopascal@yahoo.com.br");<br />
contatoInfoArray.add(cInfo);<br />
:<br />
50
Na linha seguinte carregamos o layout “personalizado” em nossa ListView por<br />
meio do método setAdapter ,onde passamos como argumento a instância da<br />
classe MyCustomRowBaseAdapter que será responsável por aplicar o layout<br />
personalizado. Veja o código abaixo:<br />
lstcontatos.setAdapter(new MyCustomRowBaseAdapter(this,<br />
contatoInfoArray));<br />
Executando a nossa aplicação iremos ter o seguinte resultado:<br />
Aplicação em execução<br />
Até agora aprendemos a exibir as informações de forma personalizada dentro<br />
da nossa ListView, agora iremos aprender como “obter” as informações dentro<br />
da nossa ListView personalizada.<br />
Para isso vamos escrever o seguinte código destacado em azul em seguida<br />
dentro do arquivo “AplicacaoActivity.java”:<br />
51
:<br />
contatoInfoArray.add(cInfo);<br />
lstcontatos.setAdapter(new MyCustomRowBaseAdapter(this,<br />
contatoInfoArray));<br />
lstcontatos.setOnItemClickListener(new<br />
AdapterView.OnItemClickListener() {<br />
@Override<br />
public void onItemClick(AdapterView a, View v, int position,<br />
long id) {<br />
Object obj = lstcontatos.getItemAtPosition(position);<br />
ContatoInfo contatoInfo = (ContatoInfo) obj;<br />
AlertDialog.Builder dialogo = new AlertDialog.<br />
Builder(AplicacaoActivity.this);<br />
dialogo.setTitle("Informação");<br />
dialogo.setMessage("Nome : " + contatoInfo.getNome() + "\n" +<br />
"Telefone : " + contatoInfo.getTelefone() + "\n" +<br />
"Email : " + contatoInfo.getEmail());<br />
dialogo.setNeutralButton("OK", null);<br />
dialogo.show();<br />
});<br />
}<br />
Irei explicar o código inserido acima. Nós adicionamos o evento de click da<br />
ListView, que ocorrerá toda vez que um item da lista for selecionado, através<br />
do método setOnItemClickListener. Dentro da estrutura do evento existe um<br />
método chamado onItemClick que será executado toda vez que um item for<br />
selecionado. Dentro do método temos a seguinte linha de comando:<br />
Object obj = lstcontatos.getItemAtPosition(position);<br />
Que irá retornar para a variável obj a instância do item selecionado, através do<br />
método getItemAtPosition.<br />
Como todos nós sabemos a instância por padrão é retornada como um tipo<br />
Object, mas, ela está estrutura como um tipo de instância da classe<br />
ContatoInfo. Para isso precisamos aplicar a “coerção” (ou cast), que é<br />
realizada na próxima instrução, como você confere abaixo:<br />
ContatoInfo contatoInfo = (ContatoInfo) obj;<br />
52
Nas próximas instruções tratamos de criar a nossa caixa de diálogo, para exibir<br />
as informações na tela.<br />
Experimente executar agora a nossa aplicação e confira o resultado, como<br />
demonstra a figura seguinte:<br />
Aplicação em execução – Item selecionado<br />
<strong>Customizando</strong> uma ProgressBar<br />
Neste tópico iremos aprender a “customizar” um componente do tipo<br />
ProgressBar em uma aplicação.<br />
Para começar, vamos criar um arquivo XML chamado<br />
“progressbar_personalizado.xml” dentro da pasta “layout” do nosso projeto.<br />
Feito isso, vamos copiar o seguinte código XML em seguida:<br />
53
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
android:layout_gravity="center"<br />
android:gravity="center"<br />
android:orientation="vertical" ><br />
<br />
<br />
<br />
<br />
Eis o resultado :<br />
Tela da aplicação<br />
55
Agora dentro do arquivo “AplicacaoActivity.java” vamos digitar o seguinte<br />
código:<br />
package com.example.aplicandoestilos;<br />
import android.os.Bundle;<br />
import android.app.Activity;<br />
import android.widget.*;<br />
import android.os.*;<br />
public class AplicacaoActivity extends Activity {<br />
ProgressBar barra_progresso;<br />
TextView txtinfo_download;<br />
Handler handleDownload;<br />
Runnable rDownload;<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.progressbar_personalizado);<br />
txtinfo_download = (TextView) findViewById<br />
(R.id.txtinfo_download);<br />
barra_progresso = (ProgressBar) findViewById<br />
(R.id.barra_progresso);<br />
rDownload = new Runnable() {<br />
@Override<br />
public void run() {<br />
barra_progresso.incrementProgressBy(5);<br />
if(barra_progresso.getProgress() < 100)<br />
{<br />
txtinfo_download.<br />
setText(barra_progresso.getProgress() + "%");<br />
}<br />
handleDownload.postDelayed(rDownload,100);<br />
}<br />
else<br />
{<br />
txtinfo_download.setText("Download concluído");<br />
}<br />
}<br />
};<br />
handleDownload = new Handler();<br />
handleDownload.postDelayed(rDownload, 100);<br />
}<br />
56
Aplicação em Execução<br />
Por padrão o componente ProgressBar já possui sua formatação e estilo<br />
próprio. Vamos formatá-la de acordo com a nossa aplicação.<br />
Para isso, vamos criar dentro do diretório “drawable” o seguinte arquivo XML :<br />
“mycustomprogressbar.xml”. A estrutura padrão da do arquivo XML que irá<br />
customizar nossa ProgressBar será do tipo “layer-list” (selecionar essa opção<br />
em “Root Element”). Depois disso, vamos digitar o seguinte código abaixo:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
57
<br />
<br />
<br />
<br />
<br />
Irei explicar aqui algumas linhas de código. Dentro da estrutura <br />
existem duas tags do tipo . A primeira tag é responsável por<br />
alterar o fundo da nossa ProgressBar através do parâmetro<br />
“android:id=@android:id/background”. Já a segunda tag é responsável<br />
por alterar a cor da barra de progresso (aquela barra azul que estava<br />
“correndo” durante a execução da aplicação anterior), através do parâmetro :<br />
“android:id=@android:id/progress”.<br />
Agora vamos abrir o arquivo “progressar_personalizado.xml” e em seguida<br />
selecione o componente ProgressBar (nomeado como “barra_progresso”) e<br />
em seguida altere a seguinte propriedade:<br />
ProgressBar (barra_progresso)<br />
Propriedade<br />
Progress Drawable<br />
Valor<br />
@drawable/mycustomprogressbar<br />
A propriedade “Progress Drawable” é responsável por alterar o estilo do nosso<br />
componente ProgressBar. Feito isso, teremos o seguinte resultado:<br />
58
Componente ProgressBar customizado<br />
Execute agora a aplicação e confira os resultados, conforme você pode ver na<br />
figura seguinte:<br />
Aplicação em execução – ProgressBar customizado<br />
59
Conclusão a respeito do <strong>Tutorial</strong><br />
Neste tutorial aprendemos passo a passo a customizar nossos componentes<br />
para as nossas aplicações. Os componentes customizados nesse material<br />
foram TextView, EditText, Button, CheckBox, RadioButton, ListView e<br />
ProgressBar.<br />
Espero que meu tutorial lhe tenha sido útil<br />
Um forte abraço.<br />
60