Preparando o aplicativo para Android Q. Parte 2

A tradução do artigo foi preparada especificamente para os alunos do curso "Android-developer. Curso básico " . Lembramos também que continuamos a se inscrever no curso avançado "Specialization Android-developer"




Privacidade e segurança podem ser encontradas na primeira parte do artigo.

2) Experiências do usuário


a) Gestos de navegação




No Android Q, o Google tentou combinar todos os gestos de navegação com o novo sistema de gestos de navegação, que substituiu a barra de navegação flutuante (voltar, voltar para casa e aplicativos recentes).

  • O que afeta: se o seu aplicativo contiver gestos, eles poderão entrar em conflito com os gestos do sistema. Isso afetará todos os aplicativos em execução no Android Q (independentemente do SDK de destino), pois os gestos do sistema serão processados ​​primeiro.
  • Abordagem recomendada: como a barra de navegação flutuante praticamente desapareceu, é recomendável fazer pleno uso do novo espaço de tela disponível e fornecer aos usuários um efeito imersivo.

Para criar um efeito imersivo, os aplicativos devem aparecer atrás da barra de status e da barra de navegação. Primeiro, torne a barra de status e a barra de navegação transparentes.

<style name="AppTheme"> ...... <item name="android:navigationBarColor">@android:color/transparent</item> <!-- Optional, but recommended for full edge-to-edge rendering --> <item name="android:statusbarColor">@android:color/transparent</item> </style> 

Em seguida, exibimos a Activity/View exibição em tela cheia:

 view.systemUiVisibility = //Layout as if the navigation bar was hidden View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or //Layout as if the status bar was hidden View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or //Layout at its most extreme View.SYSTEM_UI_FLAG_LAYOUT_STABLE 



O FAB (botão de ação flutuante) é coberto por uma barra de navegação flutuante. Uma barra de navegação flutuante está incluída para maior clareza.

Agora que o aplicativo é exibido no modo de tela cheia atrás dos componentes (transparentes) do sistema, é possível que algum tipo de componente interativo do aplicativo seja bloqueado pela interface do usuário do sistema. Para resolver esse problema, use Insets.

Insets é um conjunto de valores que nos dirá quanto mover a Visualização para que não entrem em conflito com a interface do sistema. Esta informação é fornecida pela classe WindowInset . A partir da API 20, o Android fornece aos desenvolvedores o System Window Insets, que informa quanto espaço os componentes do sistema (como a barra de navegação flutuante e a barra de status) ocupam. Essas informações podem ser usadas para mover a tela interativa para que o usuário toque nela e não na interface do usuário do sistema.

 root.setOnApplyWindowInsetsListener { _, insets -> val fabLp = fab.layoutParams as CoordinatorLayout.LayoutParams fabLp.bottomMargin = fabOriginalBottomMargin + insets.systemWindowInsetBottom fab.layoutParams = fabLp insets.consumeSystemWindowInsets() } 

Para o FAB, defina o ouvinte WindowsInsets e aplique a janela inferior como o recuo inferior.

Da mesma forma, a partir do Android Q, o sistema fornece inserções para que os gestos de navegação movam visualizações trocadas, para que não entrem em conflito com os gestos do sistema. Eles são fornecidos por Insets.getSystemGestureInsets ()


Áreas de gestos do sistema são destacadas em amarelo.

Mas e se não quisermos mover a tela e colocar algum conteúdo nessas zonas de gestos que possam entrar em conflito com o aplicativo? Nesses cenários, o aplicativo pode determinar as áreas nas quais o aplicativo manipulará primeiro o evento de toque, em vez de gestos do sistema. Isso pode ser feito passando a List< Rect > para a API View.setSystemGestureExclusionRects () fornecida no Android Q. Esse método também está disponível no ViewCompat com androidx.core:core:1.1.0 .

  • Armadilhas: você pode se recusar a processar apenas gestos de volta. Os limites do gesto de “casa” são reservados e não podem ser redefinidos. Isso ocorre porque há apenas uma maneira de sair do aplicativo. Se seu aplicativo entrar em conflito com o gesto "inicial", use WindowInsets.getMandatorySystemGestureInsets() para obter suas bordas e mudar sua exibição.

b) Tema escuro


No ano passado, vimos muitos aplicativos começarem a oferecer suporte a temas sombrios. O Android Q adiciona essa opção às configurações do sistema.

O usuário pode ativar o tema escuro de três maneiras:

  1. Um novo item nas configurações do sistema (Configurações -> Tela -> Tema)
  2. Novo item nas Configurações rápidas
  3. Dependendo do fabricante, ele pode ser ligado no modo de economia de energia.

Para dar suporte à configuração de todo o sistema do Dark Theme, o tema padrão do seu aplicativo deve herdar do tema DayNight. Isso conecta o tema principal do aplicativo com os sinalizadores de modo noturno controlados pelo sistema. Isso funciona extraindo recursos das pastas do qualificador night .

 <!--App Compat Style--> <style name="AppTheme" parent="Theme.AppCompat.DayNight"> <!--Material Components--> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight"> 

Se você olhar dentro dos estilos de compatibilidade de aplicativos, notará que o tema DayNight aponta para AppCompat Light na configuração padrão e AppCompat na configuração noturna.

 <!--values/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat.Light"> <!--values-night/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat"> 

Se você deseja dar aos usuários a capacidade de controlar o tema no aplicativo, ligue para AppCompatDelegate.setDefaultNightMode () , que aceita um dos quatro modos:

  1. MODE_NIGHT_YES - Mostrar tema escuro
  2. MODE_NIGHT_NO - Mostrar um tópico claro
  3. MODE_NIGHT_FOLLOW_SYSTEM - Siga as configurações do sistema
  4. MODE_NIGHT_AUTO_BATTERY - MODE_NIGHT_AUTO_BATTERY tema escuro quando o dispositivo entrar no modo de economia de energia.

  • Armadilhas:

a) Não codifique as cores. Se houver cores codificadas nos arquivos de layout, é uma chamada de ativação. Substitua-os por links para color . Ainda melhor: use atributos para se referir às cores.

b) Verifique as imagens e forneça recursos alternativos como parte do classificador night .

c) Não deve haver cores revestidas em desenhos vetoriais. Use tint para estilizar recursos vetoriais com a cor correta.

d) Verifique se todos os recursos de color possuem alternativas correspondentes na pasta night ( values-night/colors.xml )

e) Se um aplicativo usar o RemoteViews para notificações ou widgets, não deixe de testá-los. É bom que o aplicativo use os estilos de notificação padrão, pois o sistema os processará.

f) Uma alteração na configuração do uiMode é uiMode sempre que o dispositivo alterna entre os modos normal e escuro. O usuário pode fazer isso manualmente ou ativar o modo de economia de energia. Se o aplicativo não manipular as alterações de configuração corretamente, a interface do usuário perde o contexto quando o dispositivo alterna entre os modos normal e escuro, porque as atividades visíveis e seus fragmentos são destruídas e recriadas. Portanto, mesmo se a interface do usuário estiver bloqueada na mesma orientação, adicione suporte para alterações na configuração. Além disso, se o aplicativo gerencia manualmente as alterações de configuração por meio do android:configChanges , há uma alta probabilidade de que você também deseje gerenciar manualmente o uiMode . Por exemplo, se um aplicativo usar a reprodução contínua (reprodutor de vídeo), talvez não seja necessário interromper a reprodução apenas porque o dispositivo alternou entre os modos normal e escuro.

O Android Q também introduziu muitas outras coisas que não discuti em detalhes, como o Painel de configurações, a nova API AudioPlaybackCapture (a API permite que os aplicativos copiem o som reproduzido por outros aplicativos. Essa função é semelhante à captura de tela, mas para áudio).

Por fim, o Android Q inclui uma lista atualizada de interfaces limitadas não específicas do SDK, que podem ter acesso negado a partir do SDK do Android. Você pode encontrar uma lista de suas violações no console do jogo na seção "Relatório de pré-lançamento".

Só isso. Se você achar que há algo importante que não é mencionado no artigo, informe-me nos comentários abaixo. ;-)

Source: https://habr.com/ru/post/pt464825/


All Articles