Come posso specificare diversi layout per gli orientamenti verticale e orizzontale?


142

Ho visto riferimenti alla possibilità di specificare due file xml di layout separati per un'attività, uno per Verticale e uno per Orizzontale. Tuttavia, non ho trovato informazioni su come farlo. Come faccio a specificare per ogni attività quale file xml è il layout verticale e qual è il layout orizzontale?

È anche possibile specificare layout diversi per schermi di dimensioni diverse? In tal caso, come viene fatto?

Risposte:


203

Crea una layout-landdirectory e inserisci la versione orizzontale del tuo file XML di layout in quella directory.


3
Significa che tutte le attività devono definire sia una vista orizzontale che verticale se lo faccio?
Jay Askren,

20
No, se non esiste una definizione layout-land, utilizza solo il layout XML nella directory di layout standard.
Mark B,

nel mio caso, layout-land non funziona quando sto usando, android: configChanges = "orientamento | tastiera nascosta | dimensione schermo"
Tushar Pandey,

9
Rimuovere l'orientamento da Android: configChanges = "orientamento | keyboardHidden | screenSize"
Ushal Naidoo

60

Devi solo metterlo in cartelle separate con nomi diversi a seconda dell'orientamento e della risoluzione, il dispositivo selezionerà automaticamente quello giusto per le sue impostazioni dello schermo

Maggiori informazioni qui:

http://developer.android.com/guide/practices/screens_support.html

in "Qualificatori di directory di risorse per dimensione e densità dello schermo"


Funziona solo con le versioni del sistema operativo 1.6 o successive. Se vuoi supportare 1.5, hai bisogno di questo link: developer.android.com/guide/practices/screens-support-1.5.html
Scott Biggs

2
@Silvio Donnini - i link non hanno più le informazioni richieste.
itsaboutcode

2
@itsaboutcode Sì. Vai su "Utilizzo dei qualificatori di configurazione"
Danation

27

Per gli amanti del mouse! Dico fare clic con il tasto destro sulla cartella delle risorse e Add new resource file, da Qualificatori disponibili, selezionare orientation:

inserisci qui la descrizione dell'immagine


Ma puoi ancora farlo manualmente, aggiungendo la sottocartella "layout-land" a

"Your-Project-directory \ app \ src \ Main \ res"

Da allora tutti i file layout.xml in questo sotto-cartella funziona solo per la modalità orizzontale automaticamente .

Utilizzare "layout-port" per la modalità verticale.


1
Questo ha funzionato per me. Ho aggiunto un nuovo file di layout come indicato con lo stesso nome della versione verticale. Android Studio ha creato automaticamente una cartella per quel layout. Un layout per il ritratto e un altro per il paesaggio. Il nuovo layout viene visualizzato automaticamente quando si ruota lo schermo.
Smitty-Werben-Jager-Manjenson,

23

Solo un promemoria:

Rimuovi orientationdall'attributo android:configChangesper l'attività nel tuo xmlfile manifest se lo hai definito:

android:configChanges="orientation|screenLayout|screenSize"

1
e se avessi bisogno di avere android: configChanges = "orientamento | screenLayout | screenSize" nel mio manifest, poiché alcuni dei miei frammenti possono essere in entrambi orientamento e altri no, ma necessitano comunque di layout separati per paesaggio e ritratto per quei frammenti che può cambiare l'orientamento in modo dinamico?
natansalda,

9

Il modo più veloce per Android Studio 3.xx e Android Studio 4.xx

1. Vai alla scheda di progettazione del layout dell'attività

2.In alto dovresti premere sul pulsante di orientamento per l'anteprima, c'è un'opzione per creare un layout orizzontale (controlla l'immagine), una nuova cartella verrà creata come file di layout XML per quel particolare orientamento

inserisci qui la descrizione dell'immagine


4

Penso che il modo più semplice nelle ultime versioni di Android sia passare alla modalità di progettazione di un XML (non di testo).

Quindi dal menu, selezionare l'opzione - Crea variazione orizzontale. Questo creerà un xml orizzontale senza problemi in pochi secondi. L'ultima versione di Android Studio ti consente di creare subito una vista orizzontale.

inserisci qui la descrizione dell'immagine

Spero che questo funzioni per te.


3

Creare una nuova directory layout-land, quindi creare xmlfile con lo stesso nome in layout-landcom'era layoutdirectory e allineare lì i contenuti per la modalità Landscape.

Si noti che l'ID del contenuto in entrambi xmlè lo stesso.


3

L'ultima riga di seguito è un esempio per l'applicazione di due quantificatori: schermo orizzontale e larghezza minima (600dp). Aggiorna 600dp con quelli di cui hai bisogno.

res/layout/main_activity.xml                # For handsets
res/layout-land/main_activity.xml           # For handsets in landscape
res/layout-sw600dp/main_activity.xml        # For 7” tablets
res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape

Quanto sopra si applica anche ai dimens

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets
res/values-sw600dp-land/dimens.xml   # For 7” tablets in landscape

Metriche utili del dispositivo: https://material.io/tools/devices/


2

Oppure usa questo:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:scrollbars="vertical" 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent">

  <LinearLayout android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

     <!-- Add your UI elements inside the inner most linear layout -->

  </LinearLayout>
</ScrollView>

0
  1. Cartella res clic con il tasto destro,
  2. Nuovo -> File di risorse Android
  3. in Qualificatori disponibili, seleziona Orientamento,
  4. aggiungi al qualificatore scelto
  5. in Orientamento schermo, selezionare Orizzontale
  6. premere OK

Utilizzando Android Studio 3.4.1, non crea più una layout-landcartella . Creerà una cartella e unirà due file di layout.

inserisci qui la descrizione dell'immagine


2
Non corretto. Non stai utilizzando la modalità di visualizzazione delle cartelle (come "Progetto"). Probabilmente stai utilizzando la modalità di visualizzazione "Android", che raggruppa i file come nel tuo screenshot in cartelle virtuali, ma la struttura effettiva delle cartelle è ancora come ogni altro post qui descrive.
monK_
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.