Livro 2 - Projeto da Mini-Calculadora

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.
  • GridLayout
    • GridLayout é um tipo de layout que organiza os componentes (Views) em células de uma  grade  com  linhas  e  colunas.  Cada  célula  pode  ocupar  mais  de  uma  linha  e coluna ou ainda conter outros layouts, o que permite a construção de layouts mais complexos.
  • TextViews, EditText e SeekBar
    • Usando  a  ferramenta  gráfica  de  desenho  do  Android  Studio,  iremos  usar  os componentes: 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 de progresso que representa um valor inteiro de 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  (re) 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 (re) 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.
    • 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 tema pré-definidos de acordo com o Material Design:
        • Tema light - possui uma app bar branca, um plano de fundo branco e texto em preto ou cinza escuro
        • Tema light com app bar preta e texto branco
        • Tema dark - app bar preta, plano de fundo cinza escuro e texto em branco ou cinza claro
      • Ao construir uma interface gráfica, podemos escolher entre esses temas pré-definidos  ou  personalizar  com  novas  cores  os  estilos.  Para  este  projeto,iremos  usar  o  tema  padrão  utilizado  nas  templates  do  Android  Studio  e,posteriormente, modificá-lo com cores personalizadas.
    • 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.
      • O Android Studio oferece uma editor de temas (Theme Editor) para ajudar na  escolha  dessas  cores.
  • 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,  Activity  principal  e  mais.  Neste  projeto  iremos configurar esse arquivo para que o aplicativo force o uso do teclado numérico ao se abrir e rode apenas em modo retrato (portrait).