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.