Sto utilizzando il visualizzatore Android VNC sul mio HTC G1. Ma per qualche ragione, quell'applicazione è sempre in modalità orizzontale nonostante il mio G1 sia in modalità verticale. Dal momento che il visualizzatore VNC di Android è open source, vorrei sapere come è possibile che l'attività di hard code sia "landscape". Vorrei cambiarlo per rispettare l'orientamento del telefono.Forzare un'attività Android per utilizzare sempre la modalità orizzontale
risposta
È possibile specificare l'orientamento di un'attività nel manifesto. Vedi here.
<activity android:allowTaskReparenting=["true" | "false"]
...
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nosensor"]
...
"adjustResize", "adjustPan"] >
È possibile impostare gli stessi dati anche nel codice java.
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Altri valori su ActivityInfo consentiranno di reimpostarlo su ritratto guidato da sensore o bloccato. Personalmente, mi piace impostarlo su qualcosa nel Manifesto come suggerito in un'altra risposta a questa domanda e poi cambiarlo in seguito utilizzando la chiamata sopra nell'SDK di Android se ce n'è bisogno.
Guardando l'AndroidManifest.xml (link), sulla linea 9:
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
Questa riga specifica il screenOrientation
come paesaggio, ma l'autore si spinge oltre nel ignorando qualsiasi orientamento dello schermo cambia con configChanges="orientation|keyboardHidden"
. Ciò indica una funzione sovrascritta in VncCanvasActivity.java.
Se si guarda a VncCanvasActivity, sulla linea 109 è la funzione overrided:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation/keyboard change
super.onConfigurationChanged(newConfig);
}
L'autore specificamente mettere un commento a ignorare le modifiche della tastiera o di orientamento.
Se si desidera modificare questo, si può tornare al file AndroidManifest.xml mostrato sopra, e cambiare la linea:
<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">
Questo dovrebbe cambiare il programma per passare da verticale a paesaggio quando l'utente ruota il dispositivo.
Questo potrebbe funzionare, ma potrebbe rovinare l'aspetto della GUI, a seconda di come è stato creato il layout. Dovrai tenerne conto. Inoltre, a seconda di come sono codificate le attività, è possibile notare che quando si modifica l'orientamento dello schermo, i valori che sono stati riempiti in qualsiasi casella di input scompaiono. Anche questo potrebbe dover essere gestito.
Perché è necessario l'attributo 'configChanges'? Sembra che funzioni sul mio telefono senza tastiera ... In quali situazioni l'orientamento cambierà in portrait se hai 'screenOrientation =" landscape "' ma ometti 'configChanges'? – Timmmm
nelle nuove versioni dovresti specificare anche screenSize: ['Se la tua applicazione ha come target API di livello 13 o superiore (come dichiarato dagli attributi minSdkVersion e targetSdkVersion), devi anche dichiarare la configurazione" screenSize ", perché cambia anche quando un dispositivo passa da un orientamento verticale a uno orizzontale.]] (http://developer.android.com/guide/topics/manifest/activity-element.html) – Cel
come forzare un'attività incorporata come l'immagine di sistema seleziona la libreria solo in orizzontale o solo ritratto? – Jacky
Arslan, perché vuoi forzare l'orientamento pro grammaticalmente, anche se c'è già un modo di manifestare <activity android:name=".youractivityName" android:screenOrientation="portrait" />
non sono il richiedente, ma forse vuole forzare programmaticamente perché vuole forzarlo in un dato momento? –
Il seguente è il codice che ho usato per visualizzare tutte le attività in modalità orizzontale:
<activity android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden"
android:name="abcActivty"/>
"orientation" Se la tua applicazione punta al livello API 13 o superiore, dovresti anche dichiarare "screenSize" –
Nel mio OnCreate(Bundle)
, io in genere fare quanto segue:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
grazie ..hai fatto il giorno –
il metodo manifest nelle altre risposte non sembra funzionare ma @anwarma il tuo ha fatto – Anup
Questo è tutto !! A lungo in attesa di questa correzione.
Ho un vecchio numero di Android su doppio avviare un'attività che richiedeva (programmaticamente) modalità paesaggio: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
Ora Android fanno modalità orizzontale su start.
Premere CTRL+F11
per ruotare lo schermo.
Ora vogliono come impostare l'orientamento predefinito di un'app, non come lo schermo può essere ruotato. –
CTRL + f12 per emulatore. – Lazy
Per Android 4.0 (Ice Cream Sandwich) e in seguito, ho dovuto aggiungere questi, oltre al valore landscape
.
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
Utilizzando solo keyboardHidden|orientation
sarebbe ancora causare perdite di memoria e la ricreazione delle mie attività quando si preme il pulsante di accensione.
Avviso di cattiva pratica! Questo non ha nulla a che fare con forzare l'attività in modalità orizzontale. Hai sempre bisogno di implementare la memorizzazione e la ricreazione dello stato della tua attività. Questa è la conoscenza base dello sviluppo Android. Non risolverlo con questa soluzione hacky. L'attività può sempre essere chiusa dal sistema se ha bisogno di più memoria. – Roel
@Roel, beh, è l'unico modo per impedire che l'attività ruoti di nuovo in verticale quando ad esempio si ruota il dispositivo. Impedisce che queste modifiche influenzino l'attività. – Peterdk
Ci scusiamo per il messaggio un po 'scontroso, ma l'ho provato e non ho tutti questi valori per la modalità orizzontale. Quando aggiungi tutti questi valori significa che tu gestisci le modifiche da te stesso in onConfigurationChanged() invece che l'attività è appena stata riavviata (e devi implementarla!) Ma se imponi a Landschape una rotazione non accadrà. – Roel
Inserirlo nel codice è IMO errato e ancor più se lo si inserisce in onCreate. Fatelo nel manifest e il "sistema" conosce l'orientamento dall'avvio dell'app. E questo tipo di meta o "guida" di livello superiore dovrebbe essere nel manifest. Se vuoi dimostrartelo, fai una pausa nel onCreate di Activity. Se lo fai nel codice, verrà chiamato due volte: si avvia in modalità verticale, quindi passa a orizzontale. Questo non succede se lo fai nel manifest.
Non sono d'accordo. Fare qualsiasi cosa nel codice invece che tramite un manifest è sempre il mio metodo preferito. In base al principio di responsabilità singola, il manifest deve riguardare solo le proprietà a livello di applicazione, i permessi e le associazioni API. In realtà non sono d'accordo con il tag
Una soluzione rapida e semplice è per il file AndroidManifest.xml, aggiungere il seguente per ogni attività che si desidera imporre alla modalità orizzontale:
android:screenOrientation="landscape"
Nel manifesto:
<activity android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">
Nella vostra attività:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
Questo funziona per Xamarin.Android. Nel OnCreate()
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
Utilizzare l'ActivityInfo (android.content.pm.ActivityInfo) nel metodo onCreate prima di chiamare setLayout metodo come questo
this.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Sebbene funzioni, forza il riavvio dell'attività. – Yegor