Como especificar layouts diferentes para o retrato e as orientações da paisagem?
-
22-09-2019 - |
Pergunta
Vi referências a poder especificar dois arquivos XML de layout separados para uma atividade, um para retrato e outro para a paisagem. Eu não estive em encontrar nenhuma informação sobre como fazer isso. Como especificar para cada atividade qual arquivo XML é o layout de retrato e qual é o layout da paisagem?
Também é possível especificar layouts diferentes para diferentes tamanhos de tela? Se sim, como isso é feito?
Solução
Crie um layout-land
diretório e coloque a versão paisagem do seu arquivo XML de layout nesse diretório.
Outras dicas
Você só precisa colocá -lo em pastas separadas com nomes diferentes, dependendo da orientação e resolução, o dispositivo selecionará automaticamente o correto para as configurações da tela
Mais informações aqui:
http://developer.android.com/guide/practices/screens_support.html
em "Qualificadores de diretório de recursos para o tamanho e densidade da tela"
Para os amantes do rato! Eu digo clique com o botão direito do mouse na pasta de recursos e Add new resource file
, e dos qualificadores disponíveis, selecione o orientation
:
Mas ainda assim você pode fazer isso manualmente, digamos, adicionando o subpasso "layout-terra" a
"Seu projeto-diretório app src main res"
Desde então, qualquer arquivo layout.xml sob este subpasso só funcionará para o modo de paisagem automaticamente.
Use "Layout-Port" para o modo retrato.
Apenas um lembrete:
Remover orientation
a partir de android:configChanges
atributo para a atividade em seu manifesto xml
Arquivo se você definiu:
android:configChanges="orientation|screenLayout|screenSize"
Crie um novo diretório layout-land
, então crie xml
Arquivo com o mesmo nome em layout-land
como era layout
diretório e alinhe seu conteúdo para o modo de paisagem.
Observe que o ID do conteúdo em ambos xml
é igual.
Ou use isto:
<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>
Eu acho que a maneira mais fácil nas versões mais recentes do Android é ir ao modo de design de um XML (não texto).
Em seguida, no menu, selecione Opção - Crie variação da paisagem. Isso criará uma paisagem XML sem nenhum aborrecimento em alguns segundos. A versão mais recente do Android Studio permite criar uma vista da paisagem imediatamente.
Espero que isso funcione pra você.
A última linha abaixo é um exemplo para aplicar dois quantificadores: paisagem e menor larguraTela (600dp). Atualize 600dp com os que você precisa.
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
O exposto acima se aplica a dimenses também
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
Uma métrica de dispositivo útil: https://material.io/tools/devices/
- Clique com o botão direito do mouse em pasta res,
- Novo -> Arquivo de Recursos Android
- Nos qualificadores disponíveis, selecione orientação,
- Adicionar ao qualificador escolhido
- Na orientação da tela, selecione Paisagem
- pressione OK
Usando o Android Studio 3.4.1, não cria mais layout-land
pasta. Ele criará uma pasta e montará dois arquivos de layout.
Maneira mais rápida para o Android Studio 3.xx
1. Vá para a guia Design do layout da atividade
2. Na parte superior, você deve pressionar a orientação para o botão de visualização, há uma opção para criar um layout da paisagem (imagem de verificação), uma nova pasta será criada como seu arquivo de layout XML para essa orientação específica