Android: xml de layout alternativo para o modo paisagem

126

Como posso ter um layout para paisagem e outro para retrato? Quero assumir uma largura extra e economizar espaço vertical quando o usuário gira o telefone de lado.

Bryan Field
fonte

Respostas:

217

Por padrão, os layouts /res/layoutsão aplicados a retrato e paisagem.

Se você tem por exemplo

/res/layout/main.xml

você pode adicionar uma nova pasta /res/layout-land, copiá main.xml-la e fazer os ajustes necessários.

orientação

Consulte também http://www.androidpeople.com/android-portrait-amp-landscape-differeent-layouts e http://www.devx.com/wireless/Article/40792/1954 para mais algumas opções.

marapet
fonte
1
Eu deveria ter para manter o nome de layout da terra ou qualquer outro @marapet palavra
Vamsi Pavan Mahesh
9
Você não pode usar nenhuma outra palavra
Foo
Minha imagem de plano de fundo se estende para a paisagem. Eu tenho layout-land e drawable-land .. ainda se estende .. Tentei usar a mesma imagem, imagens com 9 correções, mdpi, hdpi n all .. ainda persiste o problema :(
Prabs
qual é a palavra paraportrait
dsdsdsdsd
@dsdsdsdsd de acordo com estúdio Android é o layout-port
Gregzenegair
76

Na versão atual do Android Studio (v1.0.2), você pode simplesmente adicionar um layout de paisagem clicando no botão no editor visual mostrado na captura de tela abaixo. Selecione "Criar variação de paisagem"

Android Studio adicionar layout de paisagem

Reefwing
fonte
Exceto que ele coloca uma nova cópia em sua layout-landpasta. Alguma idéia de como chamar um layout a partir daí? Não pode usar R.layout.layout_name. Estou tentando configurar meus próprios layouts manualmente após a alteração na configuração, obrigado.
Azurespot
2
@NoniA. Ele deve detectar quando o telefone muda para o modo paisagem e chama o de layout-land automaticamente.
Distwo
43

Os layouts em / res / layout são aplicados a retrato e paisagem, a menos que você especifique o contrário. Vamos supor que temos /res/layout/home.xml para nossa página inicial e queremos que ela tenha uma aparência diferente nos dois tipos de layout.

  1. crie uma pasta / res / layout-land (aqui você manterá seus layouts ajustados à paisagem)
  2. copie o arquivo home.xml para lá
  3. faça as alterações necessárias

Fonte

Dalmas
fonte
que tal para 'retrato'?
Dsdsdsdsd 11/05
E os novos qualificadores <sw>?
Ruchir Baronia
6

Maneira mais rápida para o Android Studio 3.xx e Android Studio 4.xx

1. Vá para a guia Design do layout da atividade

2.No topo, você deve pressionar o botão de orientação para visualização , há uma opção para criar um layout de paisagem (verifique a imagem), uma nova pasta será criada como seu arquivo de layout xml para essa orientação específica

insira a descrição da imagem aqui

Shid
fonte
2

Você pode agrupar seu layout específico na estrutura de pastas correta da seguinte maneira.

layout-land-target_version

ie

layout-land-19 // destino KitKat

Da mesma forma, você pode criar seus layouts.

Espero que isso ajude você

Umanda
fonte
Obrigado por responder, mas não vejo como sua resposta ajuda porque esta pergunta já foi respondida. Talvez você possa explicar o benefício do -19sufixo? Isso é útil de alguma forma?
Bryan Campo
0

Vou tentar explicar em breve.

Primeiro, você pode perceber que agora deve usar o ConstraintLayout conforme solicitado pelo google (consulte a biblioteca androix).

No seu projeto do android studio, você pode fornecer layouts específicos para a tela criando res / layout / diretórios adicionais. Um para cada configuração de tela que requer um layout diferente.

Isso significa que você deve usar o qualificador de diretório nos dois casos:

  • Suporte para dispositivos Android
  • Modo paisagem ou retrato do Android

Como resultado, aqui está um exemplo:

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

Você também pode usar o qualificador com arquivos de recursos usando 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 / valores / dimens.xml

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

res / valores-terra / 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>

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

Zhar
fonte