Android: mise en page xml alternative pour le mode paysage

126

Comment puis-je avoir une mise en page pour le paysage et une pour le portrait? Je veux prendre une largeur supplémentaire et conserver de l'espace vertical lorsque l'utilisateur fait pivoter le téléphone sur le côté.

Champ Bryan
la source

Réponses:

217

Par défaut, les mises en page de /res/layoutsont appliquées à la fois au portrait et au paysage.

Si vous avez par exemple

/res/layout/main.xml

vous pouvez ajouter un nouveau dossier /res/layout-land, y copier main.xmlet effectuer les ajustements nécessaires.

orientation

Voir également http://www.androidpeople.com/android-portrait-amp-landscape-differeent-layouts et http://www.devx.com/wireless/Article/40792/1954 pour d'autres options.

marapet
la source
1
devrais-je garder le nom layout-land ou tout autre mot @marapet
Vamsi Pavan Mahesh
9
Vous ne pouvez utiliser aucun autre mot
Foo
Mon image d'arrière-plan s'étend sur le paysage.J'ai layout-land et drawable-land..j'ai encore essayé d'utiliser la même image, des images à 9 patchs, mdpi, hdpi n all.. encore le problème persiste :(
Prabs
quel est le mot pourportrait
dsdsdsdsd
@dsdsdsdsd selon le studio Android, c'est layout-port
Gregzenegair
76

Dans la version actuelle d'Android Studio (v1.0.2), vous pouvez simplement ajouter une mise en page paysage en cliquant sur le bouton dans l'éditeur visuel illustré dans la capture d'écran ci-dessous. Sélectionnez "Créer une variation de paysage"

Android Studio ajoute une disposition de paysage

Reefwing
la source
Sauf qu'il met une nouvelle copie dans votre layout-landdossier. Une idée comment appeler une mise en page à partir de là? Je ne peux pas utiliser R.layout.layout_name. J'essaie de configurer mes propres mises en page manuellement lors du changement de configuration, merci.
Azurespot
2
@NoniA. Il devrait détecter lorsque le téléphone passe en mode paysage et appeler automatiquement celui de layout-land.
Distwo
43

Les mises en page dans / res / layout sont appliquées à la fois au portrait et au paysage, sauf indication contraire de votre part. Supposons que nous ayons /res/layout/home.xml pour notre page d'accueil et que nous voulions que cela se présente différemment dans les 2 types de mise en page.

  1. créer un dossier / res / layout-land (ici, vous conserverez vos mises en page adaptées au paysage)
  2. copiez home.xml ici
  3. apporter les modifications nécessaires

La source

Dalmas
la source
qu'en est-il pour «portrait»?
dsdsdsdsd
Qu'en est-il des nouveaux qualificatifs <sw>?
Ruchir Baronia le
6

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
2

Vous pouvez regrouper votre mise en page spécifique sous la structure de dossiers appropriée comme suit.

layout-land-target_version

c'est à dire

layout-land-19 // cible KitKat

de même, vous pouvez créer vos mises en page.

J'espère que ceci vous aidera

Umanda
la source
Merci d'avoir répondu, mais je ne vois pas en quoi votre réponse peut aider car cette question a déjà été répondue. Peut-être pourriez-vous expliquer l'avantage du -19suffixe? Est-ce utile d'une manière ou d'une autre?
Bryan Field
0

Je vais essayer de l'expliquer sous peu.

Tout d'abord, vous remarquerez peut-être que vous devez maintenant utiliser ConstraintLayout comme demandé par google (voir la bibliothèque androix).

Dans votre projet de studio Android, vous pouvez fournir des mises en page spécifiques à l'écran en créant des répertoires res / layout / supplémentaires. Un pour chaque configuration d'écran qui nécessite une disposition différente.

Cela signifie que vous devez utiliser le qualificatif de répertoire dans les deux cas:

  • Prise en charge des appareils Android
  • Mode paysage ou portrait Android

En conséquence, voici un exemple:

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

Vous pouvez également utiliser le qualificatif avec les fichiers de ressources res en utilisant dimens.xml.

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 ​​/ dimens.xml

<resources>
    <dimen name="grid_view_item_height">70dp</dimen>
</resources>

res / values-land / dimens.xml

<resources>
    <dimen name="grid_view_item_height">150dp</dimen>
</resources>

your_item_grid_or_list_layout.xml

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content

    <ImageView
            android:id="@+id/image"
            android:layout_width="0dp"
            android:layout_height="@dimen/grid_view_item_height"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/border"
            android:src="@drawable/ic_menu_slideshow">

</androidx.constraintlayout.widget.ConstraintLayout>

Source: https://developer.android.com/training/multiscreen/screensizes

Zhar
la source