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);
}
Reemplazar el método de la actividad onConfigurationChanged
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>