2. Recursos Envolvidos
Nesse projeto usaremos os seguintes recursos na construção do aplicativo MiniCalculadora:
- Classe Activity
- Um aplicativo Android possui quatro tipos de componentes executáveis: activities, services, content providers e broadcast receivers. Neste projeto discutiremos activities que são subclasses da classe Activity (pacote android.app).
- Todo aplicativo possui diversas activities, cada uma vinculada a uma tela do aplicativo. Ao se clicar em uma View (componentes da interface) o usuário consegue interagir com a Activity.
- As Activities possuem um ciclo de vida onde passam por diferentes estados: em execução (active), pausado (paused) ou parado (stopped). A Activity muda de estados em resposta a diferentes tipos de eventos:
- Uma Activity ativa é visível e possui foco de toda tela.
- Uma Activity pausada é visível na tela, mas não possui foco, por exemplo, quando uma mensagem de alerta é mostrada.
- Uma Activity parada não é visível na tela, está no plano de fundo e pode ser encerrada pelo Android para poupar memória. Uma Activity é parada quando outra Activity se torna ativa. Por exemplo, durante o uso de um aplicativo se recebe uma chamada de telefone, o aplicativo das chamadas telefônicas se torna ativo e o anterior é parado.
- Quando uma Activity é iniciada (estado starting) ela sempre executa o método onCreate. É nesse método que definimos as configurações iniciais dos aplicativos.
- Outros tipos de método podem ser invocados de acordo com o clico de vida da Activity: onStart, onPause, onRestart, onResume, onStop e onDestroy.
- Para mais informações sobre o clico de vida de uma atividade, acesse o site da documentação oficial:
- ConstraintLayout
- O ConstraintLayout é uma forma de criar layouts através de Views relacionadas entre si ou com o parent, essas relações são chamadas de restrições (constraint)
- Cada View pode oferecer um posicionamento relativo em quatro direções: topo (top), fundo (bottom), esquerda (right) e direita (left).
- Essa configuração das Views pode parecer uma tarefa complexa mas pode ser facilmente realizada com a ajuda do editor de layout do Android Studio.
- Esse tipo de layout é bem flexível e permite criar designs complexos sem a necessidade de se usar hierarquias agrupadas.
- TextViews, EditText e SeekBar
- Neste projeto usaremos três componentes gráficos para o desenho do layout da tela: TextView (já utilizado no projeto 1), EditText e SeekBar.
- EditText - em outras tecnologias esse elemento é chamado de text box ou text field - trata-se de uma caixa de texto que aceita a entrada do usuário. Neste projeto vamos especificar a EditText para aceitar apenas números e restringir o máximo de números que podem ser digitados.
- SeekBar é uma barra deslizante para representar um valor inteiro entre 0 a 100 (por padrão). O usuário pode interagir com a barra e aumentar ou diminuir seu valor. Neste projeto, vamos usar a SeekBar para representar o valor da taxa de serviço e limitá-la para aceitar valores entre 0 e 30.
- Classe NumberFormat
- Vamos usar a classe NumberFormat (pacote java.text) para formatar os valores da aplicação para o padrão da moeda (R$, U$, etc.) de acordo com a localidade do aplicativo - uma parte importante da internacionalização de aplicativos. Além disso, também será aplicada formatação para mostrar a porcentagem da taxa de serviço.
- Interface TextWatcher
- Para fazer o tratamento de eventos de uma EditText é preciso implementar a interface TextWatcher (pacote android.text). Em particular, usaremos o método da interface onTextChanged para mostrar em moeda o novo valor inserido e calcular o valor da taxa de serviço e valor total da conta, toda vez que for digitado ou alterado um número da EditText.
- Interface OnSeekBarChangeListener
- Para fazer o tratamento de eventos de uma SeekBar temos que implementar a interface SeekBar.OnSeekBarChangeListener (pacote android.widget). Em particular, usaremos o método onProgressChanged para mostrar a taxa de serviço em porcentagem e calcular o valor da taxa de serviço e o total da conta toda vez que o usuário interagir com a barra de progresso.
- Material Design
- O Android segue as diretrizes de Material Design do Google para a construção de interfaces gráficas. Essas diretrizes especificam o comportamento dos componentes como elevação e sobra, cores, entre outros recursos.
- Atualmente, o Material Design encontra-se na versão 3 e também pode ser chamado de Material You
- Material Themes
- O tema de um aplicativo se refere a toda uma construção visual da aplicação. O Android oferece uma série de temas pré-definidos de acordo com o Material Design. Neste projeto vamos usar o tema chamado DayNight. Esse tipo de tema faz um contraste entre uma versão claro e outra escura.
- A partir do Android 10 (Api 29) é possível fazer a configuração do dispositivo entre dois temas: claro e escuro. Essa configuração reflete nos aplicativos, portanto ao usarmos o tema DayNight precisamos fazer duas versões, uma para o tema claro e outra para o tema escuro.
- Material Design: Elevation e Shadows
- Por especificações do Material Design, sombras (shadows) são aplicadas aos componentes de uma interface de acordo com a sua elevação com a ideia de imitar o mundo real. Logo, ao se especificar a propriedade elevation de uma View, o Android irá automaticamente aplicar um efeito de sombra ao componente.
- Segundo as diretrizes do Material Design, cada tipo de componente possui uma elevação recomendada, por exemplo, para um menu é 8dp e uma caixa de diálogo é 24dp.
- Material Design: Colors
- O Google também recomenda uma paleta de cores para ser usada em aplicativos. Cada cor possui versões de diferentes tonalidades, de tons mais claros a escuros, o que permite a construção de aplicativos com cores harmoniosas.
- Dentro do Android Studio existe uma interface para escolher facilmente entre as cores do Material design ou abrir uma janela para escolher uma cor personalizada.
- AndroidManifest.xml
- O arquivo AndroidManifest.xml é criado pelo Android Studio na inicialização do projeto. Esse arquivo contém diversas configuração do aplicativo como: nome do aplicativo, nome do pacote, nome do ícone, atividade principal, permissões e mais propriedades do aplicativo.
- Neste projeto iremos configurar o manifesto para que o aplicativo force o teclado numérico ficar aberto o tempo todo e aplicativo sempre ficar em modo retrato (portrait).
- Preferences
- Os aplicativos Android armazenam as preferências do usuário por meio de pares chave-valor (key-value), garantindo que essas informações sejam salvas de forma persistente no dispositivo. Assim, mesmo após o encerramento do aplicativo, as configurações são preservadas em um arquivo de preferências. Esse arquivo não é acessado diretamente; em vez disso, utiliza-se a classe SharedPreferences para ler, criar e alterar os dados.
- No projeto MiniCalculadora, o aplicativo acessa as preferências do usuário em dois momentos principais. Na inicialização do aplicativo para configurar a porcentagem a SeekBar. E no momento de pausa ou encerramento do aplicativo para salvar as informações para uma nova sessão futura.