¿Cómo detectar cambios de orientación en el diseño en Android?
Acabo de implementar una función de cambio de orientación, por ejemplo, cuando el diseño cambia de vertical a horizontal (o viceversa). ¿Cómo puedo detectar cuándo finalizó el evento de cambio de orientación?
No OrientationEventListener
funcionó. ¿Cómo puedo recibir notificaciones sobre eventos de cambio de orientación del diseño?
Utilice el onConfigurationChanged
método de Actividad, como se explica en la guía "Manejo de cambios en el tiempo de ejecución" de los documentos de Android :
@Override public void onConfigurationChanged(@NotNull Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } }
También tienes que editar el correspondiente.elemento en su archivo de manifiesto para incluir android:configChanges :
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">
NOTA: con Android 3.2 (API nivel 13) o superior, el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre orientación vertical y horizontal. Por lo tanto, si desea evitar que se reinicie el tiempo de ejecución debido a un cambio de orientación al desarrollar para el nivel de API 13 o superior, debe declarar android:configChanges="orientation|screenSize" para el nivel de API 13 o superior .
Solo quería mostrarte una forma de guardar todo tu paquete después de onConfigurationChanged:
Crea un nuevo paquete justo después de tu clase:
public class MainActivity extends Activity {
Bundle newBundy = new Bundle();
A continuación, después de "nulo protegido al crear", agregue esto:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
onSaveInstanceState(newBundy);
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
onSaveInstanceState(newBundy);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle("newBundy", newBundy);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBundle("newBundy");
}
Si agrega esto, se guardarán todas sus clases creadas en MainActivity.
Pero la mejor manera es agregar esto en tu AndroidManifest:
<activity name= ".MainActivity" android:configChanges="orientation|screenSize"/>