Layout dobrável
Importante
Este artigo descreve funcionalidades e diretrizes que estão em versão prévia pública e podem ser modificadas substancialmente antes de passarem para a disponibilidade geral. A Microsoft não faz nenhuma garantia, expressa ou implícita, com relação às informações fornecidas aqui.
Importante
O conteúdo dessa exibição ficará disponível somente depois que a exibição raiz da Atividade for anexada à janela. Isso acontece porque a implementação é baseada na biblioteca do Gerenciador de Janelas, e ele funciona somente quando a exibição está anexada à janela.
O componente FoldableLayout
é um layout personalizado que pode posicionar seus filhos de maneira diferente quando o aplicativo é executado em dispositivos dobráveis. O componente pode dividir a tela em duas áreas, dependendo da posição e da orientação do recurso de dobramento. Quando é dividida, a tela pode conter dois contêineres filho lado a lado ou um acima do outro.
Layout de tela única | Layout de tela dupla |
---|---|
Atributos XML
single_screen_layout_id
– Recebe a ID de layout a ser exibida no modo de tela única.dual_screen_start_layout_id
– Recebe a ID de layout a ser exibida no contêiner inicial do modo de tela dupla.dual_screen_end_layout_id
– Recebe a ID de layout a ser exibida no contêiner inicial do modo de tela dupla.
O FoldableLayout
também tem a capacidade de criar um só contêiner quando o aplicativo está em execução em um dispositivo dobrável.
Adicionamos quatro novos atributos que ajudam a criar a interface do usuário desejada:
dual_portrait_single_layout_id
– Recebe a ID de layout do contêiner único de retrato duplo.is_dual_portrait_single_container
– Cria um contêiner único vazio de retrato duplo.dual_landscape_single_layout_id
– Recebe a ID de layout do contêiner único de paisagem dupla.is_dual_landscape_single_container
– Cria um contêiner único vazio de paisagem duplicada.
Compatibilidade com smallestScreenSize
Quando uma atividade faz a transição para um novo modo de tela, mas não é recriada porque o sinalizador smallestScreenSize
está definido no arquivo de manifesto, o layout detecta a nova configuração e redimensiona automaticamente os contêineres ou até mesmo adiciona ou remove o segundo contêiner de acordo com a configuração de FoldableLayout.
Visualização do Android Studio
tools_hinge_color
– Seleciona a cor da dobradiça na visualização do layout.tools_screen_mode
– Seleciona o modo de tela na visualização do layout.
Se você adicionar fragmentos em arquivos XML a Fragmento, precisará dos seguintes atributos para visualizar a interface do usuário do fragmento:
show_in_single_screen
show_in_dual_screen_start
show_in_dual_screen_end
show_in_dual_portrait_single_container
show_in_dual_landscape_single_container
IDs de contêiner
Os contêineres têm as IDs:
first_container_id
second_container_id
Independentemente da orientação da tela ou do comportamento especial definido para o layout, se o layout mostrar somente um contêiner, a ID dele será first_container_id
. Se mostrar dois contêineres, também será second_container_id
.
Por exemplo:
- Se o aplicativo estiver no modo de tela única, a ID do contêiner será
first_container_id
. - Se uma transição para o modo de tela dupla em retrato duplo for concluída e
dual_portrait_single_layout_id
ouis_dual_portrait_single_container
estiverem definidos, haverá somente um contêiner no modo de tela dupla e a ID dele ainda seráfirst_container_id
. - Quando uma transição para paisagem dupla for concluída, mas você não tiver os atributos
dual_landscape_single_layout_id
eis_dual_landscape_single_container
definidos, ambos os contêineres com as IDsfirst_container_id
esecond_container_id
estarão presentes.
Criar FoldableLayout no código
findViewById<FrameLayout>(R.id.parent).addView(
FoldableLayout(this, FoldableLayout.Config().apply {
singleScreenLayoutId = R.layout.single_screen
dualScreenStartLayoutId = R.layout.dual_screen_start
dualScreenEndLayoutId = R.layout.dual_screen_end
dualLandscapeSingleLayoutId = R.layout.single_screen
})
)
Substituir a configuração de FoldableLayout
O código a seguir descartará a configuração antiga, substituirá por uma nova e aumentará a exibição com a nova configuração.
findViewById<FoldableLayout>(R.id.surface_duo_layout)
.newConfigCreator()
.singleScreenLayoutId(R.layout.single_screen)
.dualScreenStartLayoutId(R.layout.dual_screen_start)
.dualScreenEndLayoutId(R.layout.dual_screen_end)
.reInflate()
Atualizar a configuração de FoldableLayout
O seguinte código atualizará a configuração atual com os atributos selecionados e aumentará a exibição:
findViewById<FoldableLayout>(R.id.surface_duo_layout)
.updateConfigCreator()
.dualScreenStartLayoutId(R.layout.dual_screen_start)
.reInflate()
Como usar os componentes de layout
Para criar um aplicativo, você pode usar uma Atividade ou uma Atividade com Fragmentos para tratar da interface do usuário. Os Fragmentos também podem ser declarados em um arquivo de recurso de layout ou criados diretamente em uma Atividade. Vamos discutir como os componentes tratam desses casos mais tarde.
Usando uma Atividade
Aqui, veremos como os componentes trabalham usando apenas uma Atividade para tratar da interface do usuário.
Primeiro, você precisa adicionar o
FoldableLayout
ao arquivo *.xml da Atividade.<com.microsoft.device.dualscreen.layouts.FoldableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/enlightened_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" app:single_screen_layout_id="@layout/single_screen_layout" app:dual_screen_start_layout_id="@layout/single_screen_layout" app:dual_screen_end_layout_id="@layout/dual_screen_end_layout"/>
Em seguida, crie os três layouts para os diferentes modos de tela.
Vincule seu layout à sua atividade.
Usando fragmentos declarados em arquivos de recurso
Aqui, podemos ver como os componentes funcionam com fragmentos declarados nos arquivos *.xml.
Primeiro, você precisa adicionar o
FoldableLayout
ao arquivo *.xml da Atividade.<com.microsoft.device.dualscreen.layouts.FoldableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" app:single_screen_layout_id="@layout/single_screen_layout" app:dual_screen_start_layout_id="@layout/dual_screen_start_layout" app:dual_screen_end_layout_id="@layout/dual_screen_end_layout" />
Em seguida, declare seus fragmentos nos arquivos singlescreenlayout.xml, dualscreenstartlayout.xml e dualscreenendlayout.xml.
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/single_list" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.microsoft.device.display.samples.contentcontext.MapPointListFragment" />
Vincule seu layout à sua atividade.
Usando Fragmentos criados em uma Atividade
Por fim, veremos como os componentes funcionam com fragmentos adicionados usando getSupportFragmentManager().beginTransaction()
.
Primeiro, você precisa adicionar o
FoldableLayout
ao arquivo *.xml da Atividade.<com.microsoft.device.dualscreen.layouts.FoldableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" />
Isso cria os contêineres para os modos de exibição, mas não haverá inflado neles.
Você poderá ter acesso aos contêineres do
FoldableLayout
usando suas IDs:first_container_id
second_container_id
Em seguida, acesse a biblioteca do manipulador de estado do gerenciador de fragmentos, porque os fragmentos precisam de atenção especial ao lidar com transições de modo de tela.