
Olá,
Uma das preocupações ao se desenvolver para dispositivos móveis, é fazer um aplicativo que se adapte às diversas resoluções e aos tamanhos de tela dos inúmeros aparelhos de celular e tablets existentes hoje no mundo.
Além disso, esses dispositivos permitem duas orientações de tela:
Retrato (portrait): A altura da tela é maior que a largura;
Paisagem (landscape): A altura da tela é menor que a largura.
Felizmente o Android facilitou muito as coisas nesse sentido. É possível, por exemplo, criar pastas para armazenar as imagens do aplicativo em vários tamanhos diferente e o S.O. se encarrega de escolher a imagem mais adequada de acordo com o tamanho da tela onde o aplicativo está em execução.
Para o post de hoje, vou mostrar como utilizar as duas orientações da tela e aproveitar melhor os recursos do aparelho. Se você baixou o exemplo do post anterior, percebeu que a calculadora opera apenas na orientação retrato (portrait), pois eu inseri explicitamente este formado no arquivo de manifesto do aplicativo:
<activity android:name=".MainActivity" android:screenOrientation="portrait"/>
O primeiro passo, após excluir essa propriedade do arquivo de manifesto, é criar a pasta layout-land na pasta res do projeto:
Em seguida, criamos outro arquivo activity_main.xml dentro dessa pasta (na pasta layout também temos um arquivo com esse nome). Ele irá armazenar o layout do aplicativo quando o telefone ou tablet estiver na orientação paisagem.
Feito isso, o Android já sabe que:
Se o telefone estiver na orientação retrato ele deve mostrar o arquivo de layout que está na pasta – layout;
Se virarmos o celular, imediatamente o sistema carrega a activity_main.xml que está na pasta que nós criamos – layout-land.
Isso é feito de forma automática, sem que seja necessário incluir nenhuma linha de comando.
Veja abaixo a tela do aplicativo nas duas orientações. Perceba que na orientação paisagem, como tenho mais espaço na horizontal, acrescentei um novo conjunto de operações:
Uma situação que devemos tratar é a perda das informações quando giramos a tela. Isso ocorre porque, para cada troca de layout, o Android destrói a instância anterior e cria uma nova. Veja abaixo o que acontece no ciclo de vida da atividade (activity):
Observe que o Android disponibiliza o método onSaveInstanceState() para que possamos salvar os dados da instancia, antes que ela seja destruída. Esses valores são empacotados (Bundle) e passados para a nova instância via método onCreate.
Veja abaixo, o trecho de código onde a aplicação empacota o valorAcumulado e o operador e em seguida, no método onCreate, o trecho que mostra esses valores sendo recuperados:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putDouble("acumulado", valorAcumulado); outState.putString("operador", operador); }
if (savedInstanceState != null) { valorAcumulado = savedInstanceState.getDouble("acumulado"); operador = savedInstanceState.getString("operador"); visor.setText(valorAcumulado.toString()); }
Baixe o fonte e faça os testes.
Espero que tenha gostado. Até a próxima.
Nenhum comentário:
Postar um comentário