arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Orientación en una aplicación android

Marines Méndez

Software Developer

av_timer 4 Min. de lectura

remove_red_eye 33124 visitas

calendar_today 25 Abril 2018

Cuando tenemos abierta una aplicación en nuestro dispositivo podemos observar que la aplicación se mueve dependiendo de la posición que este nuestro dispositivo, por ejemplo si está de manera horizontal la aplicación se mueve y se muestra de manera horizontal, a este evento le vamos a llamar orientación, internamente los dispositivos móviles tienen un sensor llamado acelerómetro con este el dispositivo sabe cuando nosotros movemos nuestro dispositivo. La orientación en un actividad puede ser algo molesto por ejemplo si la orientación cambia y no se maneja correctamente, entonces resulta un comportamiento inesperado de la aplicación. Cuando se producen tales cambios, Android reinicia la Actividad en ejecución significa que destruye y vuelve a crear.

Para saber de lo que estoy hablando vamos agregen en su actividad los métodos onStart, onResume, onPause, onStop, onRestart y onDestroy

@Override protected void onStart() { 
   super.onStart(); 
   Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show(); 
} 

@Override protected void onResume() { 
   super.onResume(); 
   Toast.makeText(this, "onResume", Toast.LENGTH_SHORT).show(); 
} 

@Override protected void onPause() { 
   super.onPause(); 
   Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show(); 
} 

@Override protected void onStop() { 
   super.onStop(); 
   Toast.makeText(this, "onStop", Toast.LENGTH_SHORT).show();  
} 

@Override protected void onRestart() { 
   super.onRestart(); 
   Toast.makeText(this, "onRestart", Toast.LENGTH_SHORT).show(); 
} 

@Override protected void onDestroy() { 
    super.onDestroy();   
   Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show();  
}

Carguen la aplicación y giren la pantalla.... al girar se ejecuta onCreate eso quiere decir que toda nuestra actividad se creó nuevamente, en este caso como no tenemos datos no hay problema pero que pasa si los tenemos, el proceso de descarga de datos se reiniciará haciendo lenta la aplicación, por eso es importante saber manejar la rotación en una aplicación.

Para manejar la orientación vamos a tener 3 opciones:

  1. Bloquear la orientación de la pantalla
  2. Evitar que la actividad sea recreada
  3. Usando onSaveInstanceState y onRestoreInstanceState .

Bloquear la orientación de la pantalla

Al bloquear el cambio de orientación de la pantalla en una actividad, su actividad se mostrará sólo en un modo, es decir, Horizontal o Vertical. Esta es la forma más sencilla de manejar la orientación de la pantalla, pero generalmente no se recomienda. Para que nuestra aplicación solo se mantenga de manera vertical colocamos la siguiente línea en nuestro archivo AndroidManifest.xml en la actividad que se mantendrá vertical en este caso MainActivity.

<activity android:name=".MainActivity"   android:screenOrientation="portrait">

Ahora nuestra actividad se mantendrá de manera horizontal colocando la siguiente línea

<activity android:name=".MainActivity"  android:screenOrientation="landscape">

También podemos hacerlo con código java con las siguiente linea.

Vertical

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Horizontal.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Evitar que la actividad sea recreada

Para evitar que nuestra actividad se recree vamos a usar el atributo configChanges en nuestra actividad dentro del archivo AndroidManifest.xml.

Agregamos el atributo.

<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|keyboardHidden">

De esta manera nuestra actividad no se recreará al girar la pantalla o abrir el teclado.

Agregamos el siguiente método en nuestra actividad, cargamos y giramos la pantalla, se mostrará el mensaje onConfigurationChanged.

public void onConfigurationChanged(Configuration newConfig) {  
      super.onConfigurationChanged(newConfig);        
      Toast.makeText(this, "onConfigurationChanged", Toast.LENGTH_SHORT).show(); 
    }

Sera el unico metodo que se ejecutara al girar la pantalla, esto quiere decir que la actividad se mantendrá intacta..

Usando onSaveInstanceState y onRestoreInstanceState

Guardar y restaurar los datos haremos uso del método onSaveInstanceState () y onRestoreInstanceState (). onSaveInstanceState (): Nos servirá para guardar los datos que deseemos respaldar este método se ejecuta antes de onStrop(). onRestoreInstanceState (): Nos servirá para restaurar los datos que respaldamos al girar la pantalla, este método se ejecuta después onStrart(). Vamos hacer un ejemplo:

Agregamos los métodos

protected void onSaveInstanceState(Bundle outState) { 
  super.onSaveInstanceState(outState);  
} 
protected void onRestoreInstanceState(Bundle savedInstanceState) {                 
 super.onRestoreInstanceState(savedInstanceState);
} 

Dentro de onSave tenemos un parámetro tipo Bundle con este nosotros vamos a enviar datos al método onRestore, llamamos outState colocamos punto putInt colocamos la clave y nuestro valor en este caso la clave será “age” y el valor colocan su edad.

protected void onSaveInstanceState(Bundle outState) {
 super.onSaveInstanceState(outState);
 outState.putInt("age", 24); 
} 

Ya que enviamos el dato lo recibimos en onRestore, este método también tiene un parámetro tipo Bundle, obtenemos los datos que nos envió onSave. Creamos una variable llamada “age” igual bundle punto getInt porque enviamos un valor entero y agregamos la clave.

protected void onRestoreInstanceState(Bundle savedInstanceState) {   super.onRestoreInstanceState(savedInstanceState);
 int age = savedInstanceState.getInt("age");
}    

Por último vamos a imprimir la edad en un Toas.

protected void onRestoreInstanceState(Bundle savedInstanceState) {     super.onRestoreInstanceState(savedInstanceState);
 int age = savedInstanceState.getInt("age");
 Toast.makeText(getApplicationContext(),"Esta es mi edad "+age,Toast.LENGTH_SHORT).show();
}    

Quieres saber más sobre como usar las actividades te recomiendo que veas el bloque Actividades que se encuentra aquí en códigofacilito