23.05.2016 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!