¿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?

Jay Askren
fuente

Respuestas:

203

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

Mark B
fuente
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"

Silvio Donnini
fuente
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.

AmiNadimi
fuente
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"
Robin Qiu
fuente
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í

Shid
fuente
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.

Akanshi Srivastava
fuente
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.

Nouman Shah
fuente
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/

guardagujas
fuente
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>
Gigante
fuente
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í

eos1d3
fuente
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_