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?
risposta
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();
}
}
Grazie mille per l'ottima risposta! –
@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
Grazie amico, questo funziona anche per me. – Suniel
In genere, il cambio di orientamento chiama OnCreate()
a meno che non si sia fatto qualcosa per farlo diversamente.
È possibile inserire la logica lì.
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. –
@Poplitou vedi la risposta di siik su 'onSavedInstanceState' e anche http://stackoverflow.com/questions/4096169/onsaveinstancestate-and-onrestoreinstancestate – sealz
Grazie mille per il collegamento –
'possibile verificare l'onSavedInstanceState
dal tuo metodo onCreate
, se non è mezzo null questo è il cambiamento di configurazione.
Ok, vedo come farlo, grazie per l'ottima risposta! –
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();
}
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
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