domingo, 6 de dezembro de 2015

Utilizando as duas orientações da tela



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