• Nenhum resultado encontrado

Aplicativo Twitter ® Searches

4.3 Visão geral das tecnologias

Esta seção apresenta os recursos que você vai usar para construir o aplicativo Twitter Se- arches.

4.3.1

ListView

Muitos aplicativos móveis exibem listas de informação. Por exemplo, um aplicativo de e-mail exibe uma lista de novos e-mails, um aplicativo de agenda eletrônica exibe uma lista de contatos, um aplicativo de notícias exibe uma lista de manchetes, etc. Em cada caso, o usuário toca em um item da lista para ver mais informações – por exemplo, o conteúdo do e-mail selecionado, os detalhes do contato selecionado ou o texto da matéria da notícia selecionada. Este aplicativo usa um componente ListView (pacote

android.widget) para exibir uma lista de pesquisas identificadas que pode ser rolada caso a lista completa não possa ser exibida na tela. Você pode especificar como vai formatar cada item de ListView. Para este aplicativo, exibiremos o identificador de cada pesquisa como um objeto String em um componente TextView. Em aplicativos posteriores, você vai personalizar completamente o conteúdo exibido para cada item de ListView – exi- bindo imagens, texto e componentes Button.

4.3.2

ListActivity

Quando a tarefa principal de uma atividade é exibir uma lista de itens rolante, você pode estender a classe ListActivity (pacote android.app), a qual usa um componente ListView que ocupa o aplicativo inteiro como layout padrão. ListView é uma subclasse de Adapter-

um elemento ListView que preenche a área cliente da tela entre as barras de sistema su- perior e inferior do Android (as quais foram explicadas na Fig. 2.1). Se a interface gráfica de um componente ListActivity exige apenas o elemento ListView padrão, você não precisa definir um layout separado para sua subclasse ListActivity.

O componente MainActivity do aplicativo Twitter Searches exibe vários compo-

nentes de interface gráfica do usuário. Por isso, você vai definir um layout personalizado para MainActivity. Ao personalizar a interface gráfica do usuário de uma subclasse de ListActivity, o layout deve conter um componente ListView com o atributo Id configu-

rado como "@android:id/list" – o nome utilizado pela classe ListActivity para fazer referência a seu componente ListView.

4.3.4

ImageButton

Os usuários frequentemente tocam em botões para iniciar ações em um programa. Para salvar um par consulta-identificador de uma pesquisa neste aplicativo, você toca em um componente ImageButton (pacote android.widget). ImageButton é uma subclasse de Ima- geView, a qual fornece recursos adicionais que permitem utilizar uma imagem, como um objeto Button, (pacote android.widget) para iniciar uma ação.

4.3.5

SharedPreferences

É possível ter um ou mais arquivos contendo pares chave-valor associados a cada aplica- tivo – cada chave permite pesquisar rapidamente um valor correspondente. Usamos esse recurso para manipular um arquivo chamado searches, no qual armazenamos os pares de identificadores (as chaves) e consultas de busca no Twitter (os valores) criadas pelo usuário. Para ler os pares chave-valor desse arquivo, vamos usar objetos SharedPreferences (pacote android.content). Para modificar o conteúdo do arquivo, vamos usar objetos SharedPre- ferences.Editor (pacote android.content). As chaves presentes no arquivo devem ser ob- jetos String e os valores podem ser objetos String ou valores de tipos primitivos.

Este aplicativo lê as pesquisas salvas no método onCreate de Activity – isso é acei- tável apenas porque o volume de dados que está sendo carregado é pequeno. Quando um aplicativo é ativado, o Android cria uma thread principal, chamada thread UI, que manipula todas as interações da interface gráfica do usuário. Todo processamento de in- terface gráfica do usuário deve ser feito nessa thread. Operações de entrada/saída extensas, como carregamento de dados de arquivos e bancos de dados, não devem ser efetuadas na thre- ad UI, pois podem afetar a rapidez de resposta de seu aplicativo. Em capítulos posteriores, vamos mostrar como fazer E/S em threads separadas.

4.3.6 Objetos

Intent

para ativar outras atividades

O Android usa uma técnica conhecida como troca de mensagens de intenção para transmitir informações entre atividades dentro de um aplicativo ou atividades em apli- cativos separados. Cada atividade pode especificar filtros de intenção indicando as ações que consegue manipular. Os filtros de intenção são definidos no arquivo AndroidMani- fest.xml. Na verdade, em cada aplicativo até aqui, o IDE criou um filtro de intenção para sua única atividade, indicando que ele podia responder à ação predefinida chamada android.intent.action.MAIN, a qual especifica que a atividade pode ser usada para ativar o aplicativo para iniciar sua execução.

Um objeto Intent é usado para ativar uma atividade – ele indica uma ação a ser executada e os dados nos quais essa ação vai atuar. Neste aplicativo, quando o usuário toca em um identificador de pesquisa, criamos uma URL contendo a consulta de bus- ca no Twitter. Carregamos a URL em um navegador Web criando um novo elemento Intent para ver uma URL, passando então esse Intent para o método startActivity,

o qual nosso aplicativo herda indiretamente da classe Activity. Para ver uma URL, startActivity ativa o navegador Web do dispositivo para exibir o conteúdo – neste aplicativo, os resultados de uma busca no Twitter.

Usamos também um elemento Intent e o método startActivity para exibir um selecionador de intenção – uma interface gráfica do usuário que mostra uma lista de aplicativos que podem manipular o objeto Intent especificado. Usamos isso ao com- partilhar uma pesquisa salva para permitir ao usuário escolher como vai compartilhar uma busca.

Objetos Intent implícitos e explícitos

Os objetos Intent usados neste aplicativo são implícitosnão especificaremos um compo-

nente para exibir a página Web; em vez disso, permitiremos que o Android ative a atividade

mais adequada com base no tipo dos dados. Se várias atividades puderem tratar da ação e dos dados passados para startActivity, o sistema exibirá uma caixa de diálogo na qual o usuário poderá selecionar a atividade a ser usada. Se o sistema não consegue encontrar uma atividade para tratar da ação, então o método startActivity lança uma exceção ActivityNotFoundException. Em geral, considera-se uma boa prática tratar essa exceção. Optamos por não fazer isso neste aplicativo, pois os dispositivos Android nos quais esse aplicativo provavelmente vai ser instalado têm um navegador capaz de exibir uma página Web. Em aplicativos futuros, também usaremos objetos Intent explícitos, os quais indi-

cam precisamente a atividade a ser iniciada. Para obter mais informações sobre objetos Intent, visite:

http://developer.android.com/guide/components/intents-filters.html

4.3.7

AlertDialog

As mensagens, opções e confirmações podem ser exibidas para os usuários do aplicati- vo por meio de componentes AlertDialog. Enquanto uma caixa de diálogo está sendo

exibida, o usuário não pode interagir com o aplicativo – isso é conhecido como caixa de diálogo modal. Conforme você vai ver, as configurações da caixa de diálogo são es- pecificadas com um objeto AlertDialog.Builder, sendo ele então utilizado para criar o

componente AlertDialog.

Os componentes AlertDialog podem exibir botões, caixas de seleção, botões de opção e listas de itens em que o usuário pode tocar para responder à mensagem da caixa de diálogo. Um componente AlertDialog padrão pode ter até três botões representando:

• Para exibir uma mensagem ao usuário, caso nenhum ou ambos os componentes EditText de consulta e identificação estejam vazios. Essa caixa de diálogo conterá somente um botão positivo.

• Para exibir as opções Share, Edit e Delete para uma pesquisa. Essa caixa de diálogo

conterá uma lista de opções e um botão negativo.

• Para que o usuário confirme antes de excluir uma pesquisa – no caso de ter tocado acidentalmente na opção Delete para uma pesquisa.

Mais informações sobre as caixas de diálogo do Android podem ser encontradas em: http://developer.android.com/guide/topics/ui/dialogs.html

4.3.8

AndroidManifest.xml

Conforme você aprendeu no Capítulo 3, o arquivo AndroidManifest.xml é gerado no momento em que um aplicativo é criado. Para este aplicativo, vamos mostrar a você como adicionar no manifesto uma configuração que impede a exibição do teclado vir- tual quando o aplicativo é carregado pela primeira vez. Para ver os detalhes completos de AndroidManifest.xml, visite:

http://developer.android.com/guide/topics/manifest/manifest-intro.html Vamos abordar vários aspectos do arquivo AndroidManifest.xml por todo o livro.

4.4

Construção da interface gráfica do usuário

do aplicativo

Nesta seção, vamos construir a interface gráfica do usuário do aplicativo Twitter Searches.

Também vamos criar um segundo layout XML, o qual o componente ListView vai inflar dinamicamente e usar para exibir cada item.

4.4.1 Criação do projeto

Lembre-se de que o IDE Android Developer Tools só permite um projeto com deter- minado nome por área de trabalho; portanto, antes de criar o novo projeto, exclua o projeto TwitterSearches que você testou na Seção 4.2. Para isso, clique nele com o botão direito do mouse e selecione Delete. Na caixa de diálogo que aparece, certifique-se de

que Delete project contents on disknão esteja selecionado e, em seguida, clique em OK. Isso

remove o projeto da área de trabalho, mas deixa a pasta e os arquivos do projeto no disco para o caso de posteriormente você querer ver o aplicativo original outra vez.

Criando um novo projeto Blank App

Crie um novo Android Application Project. Especifique os seguintes valores no primeiro

passo de New Android Application da caixa de diálogo New Android Project e, em seguida,

pressione Next >:

Application Name: Twitter Searches • Project Name: TwitterSearches

Package Name: com.deitel.twittersearches • Minimum Required SDK: API18: Android 4.3 • Target SDK: API19: Android 4.4

Compile With: API19 : Android 4.4 • Theme: Holo Light with Dark Action Bar

No segundo passo de New Android Application da caixa de diálogo New Android Project, dei-

xe as configurações padrão e pressione Next >. No passo Configure Launcher Icon, clique no

botão Browse..., selecione uma imagem de ícone de aplicativo (fornecida na pasta ima- ges com os exemplos do livro), pressione Open e depois Next >. No passo Create Activity,

selecione Blank Activity e pressione Next >. No passo Blank Activity, deixe as configurações

padrão e clique em Finish para criar o projeto. No editor Graphical Layout, abra activi- ty_main.xml e selecione Nexus 4 na lista suspensa de tipo de tela (como na Fig. 2.12).

Mais uma vez, usaremos esse dispositivo como base para nosso projeto.

4.4.2 Visão geral de

activity_main.xml

Como no Capítulo 3, o layout activity_main.xml deste aplicativo utiliza um compo- nente GridLayout (Fig. 4.11). Neste aplicativo, o componente GridLayout contém três linhas e uma coluna. A Figura 4.12 mostra os nomes dos componentes da interface gráfica do aplicativo.

linha 1

linha 2

linha 0 Esta linha é um componente

LinearLayout horizontal contendo um elemento EditText e um elemento ImageButton

Esta linha é um componente LinearLayout vertical contendo um elemento TextView (Tagged Searches) e um elemento ListView

para o componente ListView em um layout padronizado de ListActivity)

Figura 4.12 Componentes da interface gráfica do usuário do aplicativo Twitter Searches rotulados com seus valores de propriedade Id.

4.4.3 Adição de

GridLayout

e componentes

Utilizando as técnicas aprendidas no Capítulo 3, você vai construir a interface gráfica do usuário das Figuras 4.11 e 4.12. Todos os passos nas subseções a seguir presumem que você está trabalhando com o layout no editor Graphical Layout do IDE. Como lembrete,

frequentemente é mais fácil selecionar um componente de interface gráfica do usuário em particular na janela Outline.

Você vai começar com o layout e os controles básicos e, em seguida, vai personalizar as propriedades dos controles para concluir o projeto. Use a janela Outline para adicionar

elementos às linhas corretas do componente GridLayout. À medida que adicionar compo- nentes de interface gráfica do usuário, configure suas propriedades Id como mostrado na

Fig. 4.12 – nesse layout existem vários componentes que não exigem Id, pois nunca são refe-

renciados no código Java do aplicativo. Além disso, lembre-se de definir todos os valores de string literais no arquivo strings.xml (localizado dentro da pasta res/values do aplicativo).

Passo 1: Mudando de RelativeLayout para GridLayout

Siga os passos da Seção 3.4.3 para trocar de RelativeLayout para GridLayout.