Android inizia il layout con l'orientamento corrente, dopodiché disabilita la rotazione
-
29-10-2019 - |
Domanda
Voglio rendere possibile l'utilizzo di un'attività in orizzontale / verticale. L'attività inizia con il layout per l'orientamento corrente (ovvero prima di iniziare l'attività). Dopodiché deve attenersi ad esso e non reagire al cambio di orientamento.
Ho provato a inserire
android:configChanges="orientation"
nel manifesto dell'attività e prevalente
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}
per non fare nulla (ho provato a commentare anche la super chiamata, ma questo ha portato a un'eccezione) ma questo non ha l'effetto di disabilitare la modifica della rotazione: la modifica viene elaborata e il layout ricostruito, semplicemente non utilizza quello corretto.
E non posso usare
android:screenOrientation
Perché sembra che devo specificare solo una modalità per sempre, e non è nemmeno quello di cui ho bisogno. E comunque, se specifico qualcosa lì, l'attività viene ricostruita durante la rotazione. Provato con
android:screenOrientation="nosensor"
che non fa nulla
Qui c'è un blocco dell'orientamento corrente con codice http://www.samcoles.co.uk/ mobile / Android-lock-and-unlock-screen-Orientamento /
Ma ottiene lo stesso effetto della specifica dell'orientamento in XML (mantiene il layout ma ricostruisce l'attività). È un po 'più vicino a quello che voglio (mantiene l'orientamento dall'inizio), ma ricostruisce l'attività e non voglio che reagisca affatto.
Soluzione
android: configChanges="orientamento" non funziona affatto sull'emulatore, ma funziona bene sui dispositivi.
Altri suggerimenti
Prova
@Override
public void onConfigurationChanged(Configuration newConfig) {
newConfig.orientation = getResources().getConfiguration().orientation;
super.onConfigurationChanged(newConfig);
}
. Aggiungilo a onCreate
if (this.getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}
else {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}