studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android

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



manual de programacion android pdf (6)

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 terminó el evento de cambio de orientación?

El OrientationEventListener no funcionó. ¿Cómo puedo recibir notificaciones sobre cambios de orientación de diseño?


Crear la instancia de la clase OrientationEventListener

OrientationEventListener mOrientationEventListener = new OrientationEventListener(YourActivity.this) { @Override public void onOrientationChanged(int orientation) { Log.d(TAG,"orientation = " + orientation); }


Para cargar el diseño en la carpeta layout-land significa que tiene dos diseños separados, entonces tiene que hacer que setContentView en el método onConfigurationChanged .

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { setContentView(R.layout.yourxmlinlayout-land); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ setContentView(R.layout.yourxmlinlayoutfolder); } }

Si tiene solo un diseño, entonces no es necesario hacer setContentView en este método. simplemente

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); }



Solo quería mostrarle una forma de guardar todo su paquete después de enConfigurationChanged:

Crea un nuevo paquete justo después de tu clase:

public class MainActivity extends Activity { Bundle newBundy = new Bundle();

Luego, después de "protected void onCreate" agrega 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 de crated en MainActivity.

Pero la mejor manera es agregar esto en su AndroidManifest:

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


Use el método de actividad onConfigurationChanged . Vea el siguiente código:

@Override public void onConfigurationChanged(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 tiene que editar el apropiado elemento en su archivo manifest para incluir el android: configChanges Simplemente vea el siguiente código:

<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">

NOTA: con Android 3.2 (nivel de API 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 el reinicio del tiempo de ejecución debido al cambio de orientación cuando se desarrolla para el nivel API 13 o superior, debe declarar android: configChanges = "orientation | screenSize" para el nivel API 13 o superior .

Espero que esto te ayudará... :)


usa este método

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(getActivity(),"PORTRAIT",Toast.LENGTH_LONG).show(); //add your code what you want to do when screen on PORTRAIT MODE } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(getActivity(),"LANDSCAPE",Toast.LENGTH_LONG).show(); //add your code what you want to do when screen on LANDSCAPE MODE } }

Y no olvide agregar esto en su Androidmainfest.xml

android:configChanges="orientation|screenSize"

Me gusta esto

<activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.NoActionBar" android:configChanges="orientation|screenSize"> </activity>