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
ViewQuando 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.xmle recursos de
Stringformatados
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.xmlEste 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.