¿Cómo especifico diferentes diseños para las orientaciones vertical y horizontal?


142

He visto referencias para poder especificar dos archivos xml de diseño separados para una actividad, uno para Retrato y otro para Paisaje. Sin embargo, no he encontrado ninguna información sobre cómo hacerlo. ¿Cómo especifico para cada actividad qué archivo xml es su diseño vertical y cuál es el diseño horizontal?

¿También es posible especificar diferentes diseños para diferentes tamaños de pantalla? Si es así, ¿cómo se hace?

Respuestas:


203

Cree un layout-landdirectorio y coloque la versión horizontal de su archivo XML de diseño en ese directorio.


3
¿Eso significa que todas las actividades deben definir una vista horizontal y vertical si hago esto?
Jay Askren el

20
No, si no existe una definición de terreno de diseño, solo usa el diseño XML en el directorio de diseño estándar.
Mark B el

en mi caso, layout-land no funciona cuando estoy usando, android: configChanges = "oriente | keyboardHidden | screenSize"
Tushar Pandey

9
Eliminar la orientación de Android: configChanges = "oriente | keyboardHidden | screenSize"
Ushal Naidoo

60

Solo tiene que ponerlo en carpetas separadas con diferentes nombres dependiendo de la orientación y la resolución, el dispositivo seleccionará automáticamente la correcta para su configuración de pantalla

Más información aquí:

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

en "Calificadores del directorio de recursos para el tamaño y la densidad de la pantalla"


Solo funciona para las versiones del sistema operativo 1.6 o superior. Si desea admitir 1.5, necesita este enlace: developer.android.com/guide/practices/screens-support-1.5.html
Scott Biggs

2
@Silvio Donnini: los enlaces ya no tienen la información requerida.
itsaboutcode

2
@itsaboutcode Sí, sí: vaya a "Usar calificadores de configuración"
Danation

27

¡Para los amantes del ratón! Digo que haga clic derecho en la carpeta de recursos y Add new resource file, y de los calificadores disponibles, seleccione orientation:

ingrese la descripción de la imagen aquí


Pero aún así puede hacerlo manualmente diciendo, agregando la subcarpeta "layout-land" a

"Your-Project-Directory \ app \ src \ main \ res"

desde entonces, cualquier archivo layout.xml en esta subcarpeta solo funcionará en modo horizontal automáticamente .

Utilice "puerto de diseño" para el modo vertical.


1
Esto funcionó para mí. Agregué un nuevo archivo de diseño según las instrucciones con el mismo nombre que la versión vertical. Android Studio creó automáticamente una carpeta para ese diseño. Un diseño para retrato y otro para paisaje. El nuevo diseño se muestra automáticamente al girar la pantalla.
Smitty-Werben-Jager-Manjenson

23

Simplemente un recordatorio:

Elimine orientationdel android:configChangesatributo para la actividad en su xmlarchivo de manifiesto si lo definió:

android:configChanges="orientation|screenLayout|screenSize"

1
¿Qué pasa si necesito tener android: configChanges = "orientación | screenLayout | screenSize" en mi manifiesto, ya que algunos de mis fragmentos pueden estar en orientación y otros no, pero todavía necesitan diseños separados para paisaje y retrato para esos fragmentos que puede cambiar de orientación dinámicamente?
Natansalda

9

La forma más rápida para Android Studio 3.xx y Android Studio 4.xx

1.Vaya a la pestaña de diseño del diseño de la actividad.

2.En la parte superior debe presionar el botón de orientación para vista previa, hay una opción para crear un diseño horizontal (ver imagen), se creará una nueva carpeta como su archivo de diseño xml para esa orientación particular

ingrese la descripción de la imagen aquí


4

Creo que la forma más fácil en las últimas versiones de Android es ir al modo de diseño de un XML (no texto).

Luego, desde el menú, seleccione la opción - Crear variación de paisaje. Esto creará un xml horizontal sin ningún problema en unos segundos. La última versión de Android Studio le permite crear una vista horizontal de inmediato.

ingrese la descripción de la imagen aquí

Espero que esto funcione para ti.


3

Cree un nuevo directorio layout-land, luego cree un xmlarchivo con el mismo nombre layout-landque el layoutdirectorio y alinee allí su contenido para el modo horizontal.

Tenga en cuenta que la identificación del contenido en ambos xmles la misma.


3

La última línea a continuación es un ejemplo para aplicar dos cuantificadores: horizontal y pantalla de ancho más pequeño (600dp). Actualice 600dp con los que necesita.

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

Lo anterior también se aplica a los 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

Una métrica útil del dispositivo: https://material.io/tools/devices/


2

O usa esto:

<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. Haga clic derecho en la carpeta res,
  2. Nuevo -> Archivo de recursos de Android
  3. en Calificadores disponibles, seleccione Orientación,
  4. agregar al calificador elegido
  5. en Orientación de pantalla, seleccione Paisaje
  6. presiona OK

Usando Android Studio 3.4.1, ya no crea una layout-landcarpeta . Creará una carpeta y juntará dos archivos de diseño.

ingrese la descripción de la imagen aquí


2
Incorrecto. No está utilizando el modo de vista de carpeta (como "Proyecto"). Probablemente esté utilizando el modo de vista "Android", que agrupa archivos como en su captura de pantalla en carpetas virtuales, pero la estructura de carpetas real sigue siendo como se describe en todas las publicaciones.
monK_
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.