2013-08-19 13 views
5

Ho un'app che mostra bitmap a schermo intero in un'attività. Per fornire tempi di caricamento rapidi, li carico nella memoria. Ma quando lo schermo cambia orientamento, vorrei cancellare la cache per riempirla nuovamente con bitmap che si adattano alle nuove dimensioni. L'unico problema è che per fare ciò, devo rilevare quando si verifica un cambiamento di orientamento. Qualcuno sa come rilevare questo?Come rilevare quando il dispositivo passa dalla modalità verticale a quella orizzontale?

+1

possibile duplicato di [ Come rilevare i cambiamenti di orientamento nel layout in Android?] (Http://stackoverflow.com/questions/5726657/how-to-detect-orientation-change-in-layout-in -android) – Sam

risposta

23

rimanda alla documentazione ufficiale http://developer.android.com/guide/topics/resources/runtime-changes.html

La modifica sarà effettivamente creare una nuova vista e onCreate sarà chiamato di nuovo.

Inoltre è possibile controllare via

@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(); 
    } 
} 
+0

Grazie mille per l'ottima risposta! –

+4

@noone: si noti che questo metodo verrà chiamato SOLO se sono state selezionate le configurazioni che si desidera gestire con l'attributo 01.android.R.attr # configChanges nel manifest. Vedi javadoc! – user504342

+0

Grazie amico, questo funziona anche per me. – Suniel

2

In genere, il cambio di orientamento chiama OnCreate() a meno che non si sia fatto qualcosa per farlo diversamente.

È possibile inserire la logica lì.

+0

Ovviamente ha senso, ma come fare in modo di non ricaricare la cache ogni volta che viene chiamato onCreate? onCreate potrebbe essere chiamato semplicemente dopo che l'attività è stata ricreata dopo una telefonata con l'esempio e la cache non dovrebbe essere ricaricata in questa situazione. –

+1

@Poplitou vedi la risposta di siik su 'onSavedInstanceState' e anche http://stackoverflow.com/questions/4096169/onsaveinstancestate-and-onrestoreinstancestate – sealz

+0

Grazie mille per il collegamento –

3

'possibile verificare l'onSavedInstanceState dal tuo metodo onCreate, se non è mezzo null questo è il cambiamento di configurazione.

+0

Ok, vedo come farlo, grazie per l'ottima risposta! –

3

Un altro approccio utilizza OrientationEventListener.

Può essere utilizzato in questo modo:

OrientationEventListener mOrientationEventListener = new OrientationEventListener(
      this, SensorManager.SENSOR_DELAY_NORMAL) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      //checking if device was rotated 
      if (orientationPortrait != isPortrait(orientation)) { 
       orientationPortrait = !orientationPortrait; 
       Log.d(TAG, "Device was rotated!"); 
      } 
     } 
    }; 

Per controllare l'orientamento:

private boolean isPortrait(int orientation) { 
    return (orientation >= (360 - 90) && orientation <= 360) || (orientation >= 0 && orientation <= 90); 
} 

E non dimenticate di attivare e disattivare ascoltatore:

if (mOrientationEventListener != null) { 
     mOrientationEventListener.enable(); 
    } 

if (mOrientationEventListener != null) { 
     mOrientationEventListener.disable(); 
    } 
+0

Penso che il cambio di configurazione sia una cosa, in questo caso onConfigurationChanged è la strada da percorrere. Ma se hai bloccato le modifiche all'orientamento e vuoi comunque essere informato, i listener di orientamento sono l'approccio migliore. Grazie a Bogdan. – Murciegalo84

Problemi correlati