• Nenhum resultado encontrado

Quando o usuário dá um palpite correto, o aplicativo exibe a resposta certa por dois segun- dos, antes de exibir a próxima bandeira. Para isso, usamos um objeto Handler (pacote an- droid.os). O método postDelayed de Handler recebe como argumentos um objeto Runna- ble para executar e um valor de tempo de espera em milissegundos. Decorrido o tempo de espera, o objeto Runnable de Handler é executado na mesma thread que criou o objeto Han- dler. As operações que interagem com a interface gráfica do usuário ou a modificam devem ser

efetuadas na thread da interface, pois os componentes da interface não são seguros para threads.

5.3.12 Aplicação de uma animação a um objeto

View

Quando o usuário faz uma escolha incorreta, o aplicativo faz a bandeira tremular ao aplicar um objeto Animation (pacote android.view.animation) no componente Image- View. Usamos o método estático loadAnimation de AnimationUtils para carregar a ani-

mação de um arquivo XML que especifica as opções de animação. Também especifica- mos o número de vezes que a animação deve se repetir com o método setRepeatCount de

Animation e fazemos a animação chamando o método startAnimation de View (com o objeto Animation como argumento) no componente ImageView.

um objeto Intentimplícito para exibir uma URL no navegador Web do dispositivo. A Seção 5.5.5 mostra como usar um objeto Intentexplícito para ativar uma atividade

específica no mesmo aplicativo.

5.3.15 Estruturas de dados em Java

Este aplicativo usa várias estruturas de dados do pacote java.util. Ele carrega dinami- camente os nomes de arquivo de imagem para as regiões habilitadas e os armazena em um componente ArrayList<String>. Usamos o método shuffle de Collections para tornar a ordem dos nomes de arquivo de imagem aleatória para cada novo jogo. Usamos um segundo componente ArrayList<String> para armazenar os nomes de arquivo de imagem dos países no teste atual. Usamos também um componente Set<String> para

armazenar as regiões do mundo incluídas em um teste. Fazemos referência ao objeto ArrayList<String> com uma variável do tipo interface List<String> – essa é uma boa prática de programação com Java, que permite alterar estruturas de dados facilmente sem afetar o restante do código de seu aplicativo.

5.4

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

arquivo de recursos

Nesta seção, você vai criar o projeto e configurar os recursos de String, array, cor, dimen- são, layout e animação utilizados pelo aplicativo Flag Quiz.

5.4.1 Criação do projeto

Antes de criar o novo projeto, exclua o projeto FlagQuiz que você testou na Seção 5.2 dando um clique nele com o botão direito do mouse e selecionando Delete. Na caixa de

diálogo que aparece, certifique-se de que Delete project contents on disknão esteja selecio-

nado e, em seguida, clique em OK.

Criação de um novo projeto Blank App

Então, crie um novo Android Application Project. Especifique os seguintes valores no pri-

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

seguida, pressione Next >:

Application Name: Flag Quiz • Project Name: FlagQuiz

Package Name: com.deitel.flagquiz • 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 Pro- ject, deixe 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 images com os exemplos do livro), pressione Open e depois Next >. No passo Cre- ate 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. Abra activity-main.xml no editor Graphical Layout e selecione Nexus 4 na lista suspensa de tipo de tela. Mais uma vez,

usaremos esse dispositivo como base para nosso projeto.

5.4.2

strings.xml

e recursos de

String

formatados

Você criou recursos de String em capítulos anteriores, de modo que mostramos aqui apenas uma tabela (Fig. 5.9) dos nomes dos recursos de String e valores corresponden- tes. Clique duas vezes em strings.xml na pasta res/values a fim de exibir o editor de recursos para criar esses recursos de String.

Nome do recurso Valor

settings_activity Flag Quiz Settings

number_of_choices Number of Choices

number_of_choices_description Display 3, 6 or 9 guess buttons

world_regions Regions

world_regions_description Regions to include in the quiz

guess_country Guess the Country

results %1$d guesses, %2$.02f%% correct

incorrect_answer Incorrect!

default_region_message Setting North America as the default region. One region must be selected.

restarting_quiz Quiz will restart with your new settings

ok OK

question Question %1$d of %2$d

reset_quiz Reset Quiz

image_description Image of the current flag in the quiz

default_region North_America

Figura 5.9 Recursos de String usados no aplicativo Flag Quiz.

Formate Strings como recursos de String

Os recursos result e question são componentes Strings de formatação utilizados com o método format de String. Quando um recurso String contém vários especificadores de formato, você deve numerá-los para propósitos de adaptação ao idioma. No recurso results, a notação 1$ em %1$d indica que o primeiro argumento do método format de String após a String de formatação deve substituir o especificador de formato %1$d. Da mesma forma, 2$ em %2$.02f indica que o segundo argumento após a String de formata-

podem ser definidos no mesmo arquivo. Contudo, para facilitar o gerenciamento de diferentes tipos de recursos, separamos os arquivos que normalmente são usados para cada um deles. Por exemplo, os recursos de array normalmente são definidos em ar- rays.xml, de cores em colors.xml, de String em strings.xml e de valores numéricos em values.xml. Este aplicativo usa três recursos de array de Strings que são definidos em arrays.xml:

• regions_list especifica os nomes das regiões do mundo com as palavras separadas por sublinhados – esses valores são usados para carregar nomes de arquivo de ima- gem das pastas apropriadas e também como os valores selecionados das regiões do mundo escolhidas pelo usuário no componente SettingsFragment.

• regions_list_for_settings especifica os nomes das regiões do mundo com as pa- lavras separadas por espaços – esses valores são usados no componente Settings- Fragment para mostrar os nomes de região para o usuário.

• guesses_list especifica as Strings 3, 6 e 9 – esses valores são usados no com- ponente SettingsFragment para mostrar as opções do número de componentes Button de palpite a serem exibidos.

A Figura 5.10 mostra os nomes e valores de elemento desses três recursos de array. Nome do recurso de array Valores

regions_list Africa, Asia, Europe, North_America, Oceania, South_America regions_list_for_settings Africa, Asia, Europe, North America, Oceania, South America

guesses_list 3, 6, 9

Figura 5.10 Recursos de array String definidos em arrays.xml.

Para criar o arquivo e configurar os recursos de array, execute os passos a seguir:

1. Na pasta res do projeto, clique com o botão direito do mouse na pasta values e, então, selecione New > Android XML File para exibir a caixa de diálogo New Android XML File. Como você clicou na pasta values com o botão direito do mouse, a caixa de diálogo é previamente configurada para adicionar um arquivo de recurso Va- lues a essa pasta.

2. Especifique arrays.xml no campo File e clique em Finish para criar o arquivo.

3. Se o IDE abrir o novo arquivo no modo de exibição de XML, clique na guia Re- sources, na parte inferior da janela, para ver o editor de recursos.

4. Para criar um recurso de array de Strings, clique em Add..., selecione String Array e

clique em OK.

5. No campo Name, digite regions_list e salve o arquivo.

6. Selecione o novo recurso de array de Strings e, então, use o botão Add para adicio-

nar itens para cada um dos valores mostrados para o array na Fig. 5.10.

7. Repita os passos 4 a 6 para os arrays regions_list_for_settings e guesses_list. Quando você clicar em Add... para criar os recursos de String Array adicionais, precisará

primeiro selecionar o botão de opção Create a new element at the top level in Resources.

5.4.4

colors.xml

Este aplicativo exibe as respostas corretas na cor verde e as incorretas em vermelho. Como qualquer outro recurso, os de cor devem ser definidos em XML para que você possa alterar as cores facilmente, sem modificar o código-fonte Java de seu aplicativo. Normalmente, as cores são definidas em um nome de arquivo colors.xml, o qual você precisa criar. Conforme você aprendeu na Seção 3.4.5, as cores são definidas com os esquemas de cor RGB ou ARGB.

Para criar o arquivo e configurar os dois recursos de cor, execute os passos a seguir: 1. Na pasta res do projeto, clique com o botão direito do mouse na pasta values e,

então, selecione New > Android XML File para exibir a caixa de diálogo New Android XML File.

2. Especifique colors.xml no campo File e clique em Finish para criar o arquivo.

3. Se o IDE abrir o novo arquivo no modo de exibição de XML, clique na guia Re- sources, na parte inferior da janela, para ver o editor de recursos.

4. Para criar um recurso de cor, clique em Add..., selecione Color e clique em OK.

5. Nos campos Name e Value que aparecem, digite correct_answer e #00CC00, respec- tivamente, e salve o arquivo.

6. Repita os passos 4 e 5, mas digite incorrect_answer e #FF0000.

5.4.5 dimens.xml

Você criou recursos de dimensão em capítulos anteriores, de modo que mostramos aqui apenas uma tabela (Fig. 5.11) dos nomes e valores de recurso de dimensão. Abra dimens. xml na pasta res/values a fim de exibir o editor de recursos para criar esses recursos. O recurso spacing é usado nos layouts como espaçamento entre os vários componentes da interface gráfica do usuário, e o recurso answer_size especifica o tamanho da fonte do componente answerTextView. Lembre, da Seção 2.5.3, que os tamanhos de fonte devem ser especificados em pixels independentes de escala (sp) para que as fontes em seu apli- cativo também possam mudar de escala de acordo com o tamanho de fonte preferido do usuário (conforme especificado nas configurações do dispositivo).

Nome do recurso Valor

spacing 8dp

answer_size 40sp

3. Na seção Root Element, selecione LinearLayout e clique em Finish para criar o arquivo.

4. Da seção Layouts da Palette, arraste um objeto Fragment para a área de projeto ou

para o nó LinearLayout na janela Outline.

5. O passo anterior exibe a caixa de diálogo Choose Fragment Class. Se você definisse

a classe Fragment antes de seu layout, poderia selecionar a classe aqui. Clique em

Create New... para exibir a caixa de diálogo New Java Class.

6. Digite SettingsFragment no campo Name da caixa de diálogo, mude o valor do campo Superclass para android.preference.PreferenceFragment e clique em Finish para criar a

classe. O IDE abre o arquivo Java da classe, o qual você pode fechar por enquanto. 7. Salve activity_settings.xml.

5.4.7 Layout de

activity_main.xml

para orientação retrato