Gerenciador de Janelas do Jetpack para dispositivos dobráveis

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.

O Gerenciador de Janelas do Jetpack (no momento em versão beta) fornece uma API padrão para trabalhar com todos os dispositivos dobráveis. Ele contém duas classes importantes:

  • DisplayFeature – identifica as interrupções na superfície de tela plana contínua, como dobradiças ou dobras. O Gerenciador de Janelas retornará uma coleção de recursos de exibição de um retorno de chamada de alteração de layout.
  • FoldingFeature – fornece informações sobre um recurso específico do dispositivo, enquanto o Surface Duo tem apenas um recurso de dobra, é possível que outros dispositivos tenham mais. A classe FoldingFeature fornece informações sobre o estado dessa parte do dispositivo, com propriedades para bounds, occlusionType, orientation, state e isSeparating.

um guia semelhante no Codelab. Leia mais sobre como desenvolver para dobráveis nos documentos do Android. Exemplos da equipe do Android também estão disponíveis no GitHub. As notas sobre a versão do Jetpack registram alterações no Gerenciador de Janelas conforme ele é atualizado.

Dica

Os controles e as classes auxiliares na biblioteca de tela dupla do Surface Duo funcionam com o Gerenciador de Janelas. Siga as instruções para adicionar os pacotes corretos ao seu projeto de aplicativo.

Para usar o Gerenciador de Janelas diretamente em seu código, siga as instruções abaixo:

Adicionar dependências

Para adicionar a Biblioteca do Gerenciador de Janelas do Jetpack, atualize o arquivo build.gradle.

  1. Verifique se o projeto está sendo compilado com o nível da API 31:

    compileSdk 31
    
  2. Adicione estas dependências para que possamos acessar as APIs necessárias:

    dependencies {
        implementation "androidx.window:window:1.0.0-beta02"
        implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-alpha03'
    }
    

Observação

O nome da biblioteca inclui "beta". As APIs do Gerenciador de Janelas ainda estão em versão prévia e podem ser alteradas antes de ficarem estáveis.

Usar o Gerenciador de Janelas em seu código Kotlin

  1. Na classe MainActivity, declare uma variável para o gerenciador de janelas:

    class MainActivity : AppCompatActivity() {
       private lateinit var windowInfoRepo: WindowInfoRepository
    

    Verifique se o import androidx.window.WindowInfoRepository foi adicionado à parte superior do arquivo.

  2. Inicialize o gerenciador de janelas no onCreate de sua atividade:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        windowInfoRepo = windowInfoRepository()
    

    Verifique se o import androidx.window.layout.WindowInfoRepository.Companion.windowInfoRepository foi adicionado à parte superior do arquivo.

  3. Além disso, no método onCreate, transmita este . A atividade deve ter um TextView chamado layout_change_text para que esse método possa atualizar o texto exibido:

        lifecycleScope.launch(Dispatchers.Main) {
            lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
                windowInfoRepo.windowLayoutInfo
                    .collect { newLayoutInfo ->
                       layout_change_text.text = "No display features detected"
                        for (displayFeature : DisplayFeature in newLayoutInfo.displayFeatures) {
                            if (displayFeature is FoldingFeature && displayFeature.occlusionType == FoldingFeature.OcclusionType.NONE) {
                                layout_change_text.text = "App is spanned across a fold"
                            }
                            if (displayFeature is FoldingFeature && displayFeature.occlusionType == FoldingFeature.OcclusionType.FULL) {
                                layout_change_text.text = "App is spanned across a hinge"
                            }
                        }
                    }
            }
        }
    
    

    Verifique se estas importações são adicionadas à parte superior do arquivo:

    import androidx.lifecycle.Lifecycle
    import androidx.lifecycle.lifecycleScope
    import androidx.lifecycle.repeatOnLifecycle
    import androidx.window.layout.DisplayFeature
    import androidx.window.layout.FoldingFeature
    import kotlinx.coroutines.Dispatchers
    import kotlinx.coroutines.flow.collect
    import kotlinx.coroutines.launch
    

    Observação

    A classe WindowLayoutInfo tem uma coleção de itens DisplayFeature, um ou mais dos quais podem ser instâncias de FoldingFeature. As instâncias de recursos de dobra têm propriedades para bounds, occlusionType, orientation, state e isSeparating que você pode consultar para tomar decisões sobre como ajustar seu layout para o novo estado.

  4. Quando esse código for executado, a atividade será atualizada com a postura atual do dispositivo e os recursos de exibição (se distribuídos em toda a dobra ou dobradiça). Adicione mais código para verificar se há informações adicionais no objeto FoldingFeature.

Exemplos

O repositório do GitHub surface-duo-jetpack-window-manager-samples contém vários exemplos de Kotlin que demonstram diferentes padrões de experiência do usuário de tela dupla criados usando o Gerenciador de Janelas do Jetpack.

API Java

Consulte a postagem no blog sobre a atualização alpha10 do Gerenciador de Janelas do Jetpack e este exemplo de Java para ver como acessar a classe WindowInfoRepository por meio do WindowInfoRepositoryCallbackAdapter.

Recursos