Tutorial Android #14 – Ajustando o Layout para Paisagem (II)

Padrão

Olá pessoal! No tutorial de hoje vamos voltar a um tema já tratado superficialmente alguns posts atrás: a adaptação do layout da aplicação Lista de Restaurantes também para o modo paisagem. Não sei se vocês chegaram a testar o exemplo do tutorial 10, mas naquela situação tínhamos um pequeno problema: ao rotacionar a tela para modo paisagem / retrato, perdíamos o conteúdo do formulário, caso alguma coisa tivesse sido digitada.

No tutorial de hoje vamos fazer a rotação de uma maneira mais organizada, resolvendo também este problema. Todos prontos? 🙂

Primeiramente, precisamos de uma forma de armazenar os valores no caso da mudança de orientação do celular. Lá na classe FormularioDetalhes, vamos sobrescrever o método onSaveInstanceState(), que armazenará os valores pra gente. Adicione a seguinte implementação ao final da classe:

@Override
public void onSaveInstanceState(Bundle outState) {
	super.onSaveInstanceState(outState);

	outState.putString("nome", nome.getText().toString());
	outState.putString("endereco", endereco.getText().toString());
	outState.putString("anotacoes", anotacoes.getText().toString());
	outState.putInt("tipo", tipos.getCheckedRadioButtonId());
}

Pronto. Já fizemos com que os valores do formulário fossem salvos. Agora, vamos implementar o método onRestoreInstanceState() que devolverá os dados no formulário.

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
	super.onRestoreInstanceState(savedInstanceState);

	nome.setText(savedInstanceState.getString("nome"));
	endereco.setText(savedInstanceState.getString("endereco"));
	anotacoes.setText(savedInstanceState.getString("anotacoes"));
	tipos.check(savedInstanceState.getInt("tipo"));
}

Por fim, vamos definir novamente o nosso layout em modo paisagem. Crie novamente a pasta (se você a excluiu) res/layout-land e crie o arquivo form_detalhes.xml. Se você ainda tem o arquivo main.xml lá, exclua-o.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1,3" >
    <TableRow>
        <TextView android:text="Nome:"/>
        <EditText android:id="@+id/nome"
            android:layout_span="3" />
    </TableRow>
    <TableRow>
    	<TextView android:text="Endereço:"/>
    	<EditText android:id="@+id/end"
            android:layout_span="3" />
    </TableRow>
    <TableRow>
    	<TextView android:text="Tipo:"/>
    	<RadioGroup android:id="@+id/tipos">
    		<RadioButton android:id="@+id/rodizio"
       			android:text="Rodízio"/>
    		<RadioButton android:id="@+id/fast_food"
        		android:text="Fast Food"/>
        	<RadioButton android:id="@+id/a_domicilio"
            	android:text="A Domicílio"/>
   		</RadioGroup>
   		<TextView android:text="Anotações:"/>
   		<LinearLayout
   		    android:layout_width="fill_parent"
   		    android:layout_height="fill_parent"
   		    android:orientation="vertical">
   		    <EditText android:id="@+id/anotacoes"
    			android:singleLine="false"
	    		android:gravity="top"
    			android:lines="4"
    			android:scrollHorizontally="false"
    			android:maxLines="4"
    			android:maxWidth="140sp"
    			android:layout_width="fill_parent"
    			android:layout_height="wrap_content"/>
   		    <Button android:id="@+id/salvar"
    			android:layout_width="fill_parent"
        		android:layout_height="wrap_content"
        		android:text="Salvar"/>
   		</LinearLayout>
	</TableRow>
</TableLayout>

E pronto! Quanto a tela de listagem, não precisamos alterar seu layout pois ele funciona bem tanto em modo retrato quanto paisagem.

Quem quiser baixar o projeto, só clicar aqui. Até o próximo post!

Obs: após a última atualização do plugin ADT do Eclipse, ele acusou alguns ‘warnings‘ nos layouts XML. Por enquanto não se preocupem com isso! 😉

Um comentário sobre “Tutorial Android #14 – Ajustando o Layout para Paisagem (II)

  1. Lucas P. Rosseti

    Ola Rafael tudo bem essa parte de salvar os campos fixos mas e quando tenho que salvar uma lista como que fica? Estou tentando mas não consigo manter os campos editaveis com o valor sempre que algo muda na tela (orientação ou quando retrai o teclado virtual) os campos voltam ao valor origina.
    Tentei também
    android:configChanges=”orientation|keyboardHidden”
    mas não resolveu…
    Como proceder nesse caso?
    Grato por sua atenção

    Lucas P. Rosseti

Deixe uma resposta