Desenvolvimento moderno de widget Android

Nov 26 2020

É 2020 e os widgets estão mais uma vez na moda depois que o iOS finalmente adicionou suporte para eles. No entanto, os widgets Android não parecem ter sido atualizados desde 2012.

Dos documentos do Android :

Um objeto RemoteViews (e, consequentemente, um App Widget) pode oferecer suporte às seguintes classes de layout:

  • FrameLayout
  • LinearLayout
  • Esquema relativo
  • GridLayout

O que significa, nenhum ConstraintLayout, nenhum RecyclerView, nenhum AndroidX. Não quero voltar aos dias sombrios do ListView.

A documentação no site do desenvolvedor Android ainda é a prática recomendada para o desenvolvimento de widgets Android hoje? Alguém tem experiência em fazer widgets em um mundo AndroidX? Existe algum tipo de API de terceiros para tornar a experiência menos dolorosa?

Respostas

2 CommonsWare Nov 26 2020 at 14:26

No entanto, os widgets Android não parecem ter sido atualizados desde 2012.

Corrigir.

Não quero voltar aos dias sombrios do ListView.

Ummm ... desculpe?

A documentação no site do desenvolvedor Android ainda é a prática recomendada para o desenvolvimento de widgets Android hoje?

Os widgets de aplicativos são menos sobre "práticas recomendadas" e mais sobre o protocolo documentado e compatível. Lembre-se de que os widgets do aplicativo são realmente um protocolo de comunicação entre processos (IPC) que acaba resultando em uma IU no final. Seu aplicativo não está renderizando a IU - a tela inicial ou outro host de widget de aplicativo está, geralmente com a ajuda de AppWidgetHostAPIs relacionadas.

O que significa, nenhum ConstraintLayout, nenhum RecyclerView, nenhum AndroidX.

Corrigir. Afinal, você não sabe se a tela inicial tem acesso a alguma dessas coisas, ou em que versão elas estão, etc.

Existe algum tipo de API de terceiros para tornar a experiência menos dolorosa?

Isso não é realmente possível. Seu aplicativo tem muito pouco a ver com widgets de aplicativo. O "trabalho pesado" está na estrutura e, em menor medida, na tela inicial. Uma API de terceiros não pode realmente mudar isso.

Eu esperava que o Google começasse a orientar os desenvolvedores do launcher para começar a oferecer suporte a fatias como uma forma alternativa de "widget de aplicativo". Isso ainda não aconteceu, pois o Google parece ter esquecido as fatias. Talvez, no futuro, o Google ofereça algo baseado no Android 11SurfaceControlViewHost , que abre as portas para todos os tipos de possibilidades. Em ambos os casos, pode ser necessário que os desenvolvedores do iniciador façam alterações para oferecer suporte a essas coisas, o que retardará a adoção.

A coisa mais próxima que você pode fazer para oferecer uma IU além do que está na lista limitada de widgets e contêineres é renderizar suas próprias coisas para um Bitmape mostrá-lo em um ImageViewwidget do aplicativo. Isso fica complicado, pois você não sabe o tamanho preciso do widget do aplicativo. E, é claro, isso não muda as opções de entrada.