¿Cómo detectar cambios de orientación en el diseño en Android?

Resuelto user403015 asked hace 54 años • 11 respuestas

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 OrientationEventListenerfuncionó. ¿Cómo puedo recibir notificaciones sobre eventos de cambio de orientación del diseño?

user403015 avatar Jan 01 '70 08:01 user403015
Aceptado

Utilice el onConfigurationChangedmé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 .

 avatar Apr 20 '2011 07:04

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"/>
Nikolay Hristov avatar Jun 23 '2013 17:06 Nikolay Hristov