Comment spécifier différentes dispositions pour les orientations portrait et paysage?

142

J'ai vu des références à la possibilité de spécifier deux fichiers XML de mise en page distincts pour une activité, un pour Portrait et un pour Paysage. Cependant, je n'ai trouvé aucune information sur la façon de le faire. Comment spécifier pour chaque activité quel fichier XML correspond à la mise en page Portrait et quelle est la mise en page Paysage?

Est-il également possible de spécifier différentes dispositions pour différentes tailles d'écran? Si oui, comment cela se fait-il?

Jay Askren
la source

Réponses:

203

Créez un layout-landrépertoire et placez la version paysage de votre fichier XML de mise en page dans ce répertoire.

Marque B
la source
3
Cela signifie-t-il que toutes les activités doivent définir à la fois un paysage et une vue portrait si je fais cela?
Jay Askren
20
Non, si aucune définition de layout-land n'existe, il utilise simplement la mise en page XML dans le répertoire de mise en page standard.
Mark B
dans mon cas, layout-land ne fonctionne pas lorsque j'utilise, android: configChanges = "orientation | keyboardHidden | screenSize"
Tushar Pandey
9
Supprimer l'orientation d'Android: configChanges = "orientation | keyboardHidden | screenSize"
Ushal Naidoo
60

Il vous suffit de le placer dans des dossiers séparés avec des noms différents en fonction de l'orientation et de la résolution, l'appareil sélectionnera automatiquement le bon pour ses paramètres d'écran

Plus d'infos ici:

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

sous "Qualificatifs du répertoire de ressources pour la taille et la densité de l'écran"

Silvio Donnini
la source
Ne fonctionne que pour les versions 1.6 ou supérieures du système d'exploitation. Si vous souhaitez prendre en charge la version 1.5, vous avez besoin de ce lien: developer.android.com/guide/practices/screens-support-1.5.html
Scott Biggs
2
@Silvio Donnini - les liens n'ont plus les informations requises.
itsaboutcode
2
@itsaboutcode Oui, il le fait: Allez à "Utilisation des qualificatifs de configuration"
Danation
27

Pour les amateurs de souris! Je dis faire un clic droit sur le dossier des ressources et Add new resource file, et à partir des qualificatifs disponibles, sélectionnez orientation:

entrez la description de l'image ici


Mais vous pouvez toujours le faire manuellement en ajoutant le sous-dossier "layout-land" à

"Votre-répertoire-de-projet \ app \ src \ main \ res"

depuis lors, tout fichier layout.xml dans ce sous-dossier ne fonctionnera automatiquement qu'en mode paysage .

Utilisez "layout-port" pour le mode portrait.

AmiNadimi
la source
1
Cela a fonctionné pour moi. J'ai ajouté un nouveau fichier de mise en page comme indiqué avec le même nom que la version portrait. Android Studio a automatiquement créé un dossier pour cette mise en page. Une mise en page pour le portrait et une autre pour le paysage. La nouvelle mise en page s'affiche automatiquement lors de la rotation de l'écran.
Smitty-Werben-Jager-Manjenson
23

Juste un rappel:

Supprimer orientationde l' android:configChangesattribut pour l'activité dans votre xmlfichier manifeste si vous l'avez défini:

android:configChanges="orientation|screenLayout|screenSize"
Robin Qiu
la source
1
et si j'ai besoin d'avoir android: configChanges = "orientation | screenLayout | screenSize" dans mon manifeste, car certains de mes fragments peuvent être à la fois dans l'orientation et d'autres non, mais ont toujours besoin de mises en page séparées pour le paysage et le portrait pour ces fragments qui peut changer d'orientation dynamiquement?
natansalda le
9

Le moyen le plus rapide pour Android Studio 3.xx et Android Studio 4.xx

Accédez à l'onglet Conception de la mise en page de l'activité

2.En haut, vous devez appuyer sur le bouton d'orientation pour l'aperçu, il existe une option pour créer une mise en page paysage (vérifier l'image), un nouveau dossier sera créé en tant que fichier de mise en page xml pour cette orientation particulière

entrez la description de l'image ici

Shid
la source
4

Je pense que le moyen le plus simple dans les dernières versions d'Android est de passer en mode Conception d'un XML (pas de texte).

Ensuite, dans le menu, sélectionnez l'option - Créer une variation de paysage. Cela créera un paysage xml sans aucun tracas en quelques secondes. La dernière version d'Android Studio vous permet de créer immédiatement une vue paysage.

entrez la description de l'image ici

J'espère que cela fonctionne pour vous.

Akanshi Srivastava
la source
3

Créez un nouveau répertoire layout-land, puis créez un xmlfichier avec le même nom layout-landqu'il étaitlayout répertoire et alignez-y votre contenu pour le mode Paysage.

Notez que l'identifiant du contenu dans les deux xmlest le même.

Nouman Shah
la source
3

La dernière ligne ci-dessous est un exemple d'application de deux quantificateurs: paysage et écran de la plus petite largeur (600dp). Mettez à jour 600dp avec ceux dont vous avez besoin.

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

Ce qui précède s'applique également aux dimensions

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

Une métrique de périphérique utile: https://material.io/tools/devices/

locotracteur
la source
2

Ou utilisez ceci:

<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>
Géant
la source
0
  1. Faites un clic droit sur le dossier res,
  2. Nouveau -> Fichier de ressources Android
  3. dans Qualifications disponibles, sélectionnez Orientation,
  4. ajouter au qualificatif choisi
  5. dans Orientation de l'écran, sélectionnez Paysage
  6. appuyer sur OK

En utilisant Android Studio 3.4.1, il ne crée plus de layout-landdossier . Il créera un dossier et rassemblera deux fichiers de mise en page.

entrez la description de l'image ici

eos1d3
la source
2
Incorrect. Vous n'utilisez pas le mode d'affichage des dossiers (comme "Projet"). Vous utilisez probablement le mode d'affichage "Android", qui regroupe les fichiers comme dans votre capture d'écran dans des dossiers virtuels, mais la structure réelle des dossiers est toujours la même que tous les autres articles décrits ici.
monK_