IU do Compose

Guia do usuário  Exemplo de código (link em inglês)
Componentes fundamentais do Compose UI necessários para interagir com o dispositivo, incluindo layout, desenho e entrada.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
29 de setembro de 2021 1.0.3 - - 1.1.0-alpha05

Estrutura

O Compose é uma combinação de seis IDs de grupos do Maven no androidx. Cada grupo contém um subconjunto direcionado de funcionalidades, cada um com um conjunto próprio de notas da versão.

Esta tabela explica os grupos e contém links para cada conjunto de notas da versão.

GrupoDescrição
compose.animationCrie animações nos aplicativos Jetpack Compose para enriquecer a experiência do usuário.
compose.compilerTransforme funções que podem ser @compostas e ative otimizações com um plug-in do compilador Kotlin.
compose.foundationCrie aplicativos do Jetpack Compose com elementos básicos prontos e amplie a base para criar suas próprias peças de sistema de design.
compose.materialCrie IUs do Jetpack Compose com componentes do Material Design prontos para uso. Este é o ponto de entrada de nível mais alto do Compose, projetado para fornecer componentes que correspondam aos descritos em www.material.io.
compose.runtimeElementos fundamentais do modelo de programação e do gerenciamento de estado do Compose e do ambiente de execução principal do plug-in Compose Compiler.
compose.uiComponentes fundamentais da IU do Compose necessários para interagir com o dispositivo, incluindo layout, desenho e entrada.

Declarar dependências

Para adicionar uma dependência ao Compose, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    implementation "androidx.compose.ui:ui:1.1.0-alpha06"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha06"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.1.0-alpha06")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha06"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Para ver mais informações sobre dependências, consulte Adicionar dependências de build.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.1.0

Versão 1.1.0-alpha05

29 de setembro de 2021

Lançamento de androidx.compose.ui:ui-*:1.1.0-alpha05. A versão 1.1.0-alpha05 contém estas confirmações.

Mudanças em APIs

  • O suporte à comunicação entre modificadores foi adicionado (Id5467, b/198826874).
  • Ponteiros históricos experimentais foram adicionados ao PointerEventChange (Ic1fd8, b/197553056, b/199921305).
  • density: Density e layoutDirection: LayoutDirection foram adicionados a LayoutInfo, permitindo que os consumidores de LayoutInfo interpretem as dimensões e a posição expostas em LayoutInfo corretamente (I002f1).
  • O suporte experimental à injeção de eventos de mouse foi adicionado. Use performMouseInput para começar a enviar eventos de mouse ou envie eventos de mouse usando a propriedade Mouse do MultiModalInjectionScope durante um gesto de entrada multimodal com performMultiModalInput. Consulte o MouseInjectionScope para ver a documentação disponível da API (Iaa4a8, b/190493367).

Correções de bugs

  • Melhoria do TouchInjectionScope.swipeWithVelocity. Agora, ele aceita uma variedade maior de variáveis de entrada e sugerirá mudanças na entrada se não for possível criar um gesto de deslizar (I40fbe, b/182477143).

Versão 1.1.0-alpha04

15 de setembro de 2021

Lançamento de androidx.compose.ui:ui-*:1.1.0-alpha04. A versão 1.1.0-alpha04 contém essas confirmações (link em inglês).

Mudanças em APIs

  • A classe PointerEvent agora tem um PointerEventType para oferecer suporte a eventos de passagem do cursor (I091fa).
  • Permite que os filhos aceitem a entrada de ponteiro fora dos limites de entrada do ponteiro do pai. Os pais podem interceptar essas chamadas com uma propriedade PointerInputScope.alwaysInterceptChildEvents (I9eae3, b/192479655).
  • A performGesture e a GestureScope foram descontinuadas substituídas por performTouchInput e TouchInjectionScope (Ia5f3f, b/190493367).
  • A propriedade touchBoundsInRoot foi adicionada à SemanticsNode, que inclui o tamanho mínimo da área de toque para que os desenvolvedores possam garantir que ela atenda aos valores mínimos de acessibilidade (I2e14b, b/197751214).
  • Refaz a implementação do elemento inspecionável (I927bc, b/191017532).
  • Mudança do nome de parâmetro do elemento inspecionável para corresponder ao composto (I3a482, b/191017532).
  • Introdução de performTouchInput e TouchInjectionScope para substituir performTouchInput e TouchInjectionScope, abrindo o caminho para outras modalidades (como o mouse).

    A TouchInjectionScope tem os mesmos métodos que a GestureScope, com exceção de movePointerTo e movePointerBy, que foram renomeados como updatePointerTo e updatePointerBy. Todos os outros métodos são os mesmos.

    O comportamento da TouchInjectionScope é quase idêntico ao da GestureScope, com dois pequenos detalhes:

    1. Ao enviar um evento para baixo enquanto os ponteiros eram movidos sem enviar um evento de movimento (em outras palavras, a função updatePointerTo() era usada, mas não a move(), e depois a função down() era chamada), a implementação anterior avançava o horário do evento e enviava um evento de movimento antes de enviar o evento para baixo. A nova implementação ainda envia o evento de movimento, mas não avança o horário do evento nesse cenário específico.
    2. Ao enviar um evento para cima enquanto os ponteiros eram movidos sem enviar um evento de movimento (semelhante ao exemplo acima), a implementação anterior avançava o horário do evento e enviava um evento de movimento antes de enviar o evento para cima. A nova implementação não faz nem uma coisa nem outra: as novas posições dos ponteiros serão refletidas apenas pelo evento para cima.

    Por fim, a TouchInjectionScope introduz um novo método currentPosition(pointerId: Int) para receber a posição atual do ponteiro específico (If1191, b/190493367).

Correções de bugs

  • Permitir que o clipe amplie os limites da área de toque além da região do clipe para que ela respeite o tamanho mínimo (I43e10, b/171509422).
  • Foi adicionado suporte à rolagem esticada em dispositivos com Android 12 (Iccf3c, b/171682480).

Versão 1.1.0-alpha03

1.º de setembro de 2021

Lançamento de androidx.compose.ui:ui-*:1.1.0-alpha03. A versão 1.1.0-alpha03 contém estas confirmações.

Novos recursos

  • O Compose 1.1.0-alpha03 foi atualizado para depender do Kotlin 1.5.30 (I74545).

Mudanças em APIs

  • Adição de Modifier.inspectable para unir outros modificadores (I1909b, b/191017532).
  • Adição da API BlurredEdgeTreatment para simplificar os casos de uso de desfoque em combinações mais usadas de sinalizações de recorte e TileModes. A maioria dos casos de uso envolve permitir que o conteúdo desfocado seja renderizado fora dos limites do conteúdo original e desfocar regiões fora desses limites com preto transparente. Ou, ainda, recortar conteúdo para limites de conteúdo com amostragem da borda mais próxima para kernels de desfoque que se estendem além dos limites de conteúdo (I6b4b7, b/166927547).
  • Adição de compatibilidade com o RenderEffect no Compose para computador. Introdução do OffsetEffect e do modificador de desfoque como uma maneira simples de introduzir efeitos visuais de desfoque em uma parte da hierarquia de composição (I0f6aa, b/166927547).
  • Introdução da API RenderEffect que pode ser configurada opcionalmente em um Modifier.graphicsLayer para mudar o conteúdo da camada em si. Isso pode ser usado para desfocar o conteúdo de elementos que podem ser compostos e elementos filhos em uma hierarquia de composições. (I47c4d, b/166927547)
  • AwaitPointerEventScope agora tem withTimeout() e withTimeoutOrNull() (I507f0, b/179239764, b/182397793)
  • Um tamanho mínimo da área de toque da ViewConfiguration foi adicionado para uso na entrada de semântica e ponteiros para garantir a acessibilidade (Ie861c).
  • Adição da compatibilidade com TileMode.Decal, que é útil para definir o comportamento do Edge para RenderEffects baseados em desfoque (I7e8ed, b/166927547).
  • performScrollToIndex, performScrollToKey, hasScrollToIndexAction e hasScrollToKeyAction agora são APIs estáveis (I142ae, b/178483889)
  • Adição de método de teste para receber os limites cortados (I6b28e).

Correções de bugs

  • Remoção do método isBounded de BlurredEdgeTreatment para verificar explicitamente se o parâmetro de forma é nulo (I85d68).

Versão 1.1.0-alpha02

18 de agosto de 2021

Lançamento de androidx.compose.ui:ui-*:1.1.0-alpha02. A versão 1.1.0-alpha02 contém estas confirmações.

Mudanças em APIs

  • O PointerEvent agora é compatível com a leitura do estado do botão do mouse e do modificador do teclado (I6310c, b/180075467).
  • Os gestos injetados agora usam o horário do MainTestClock como a fonte da verdade do tempo. O horário atual para eventos injetados em performGesture será inicializado no horário atual do MainTestClock (Ifb364, b/192064452).
  • Adição do construtor DpRect(DpOffset, DpSize) (I2cf16, b/194219828)
  • Adição da classe DpSize (I7abb1, b/194219828)

Correções de bugs

  • Atualização da análise de XML de gráficos vetoriais para oferecer compatibilidade com ColorStateLists como propriedades de tonalidade de cor raiz em VectorDrawables (I86915, b/195668138).

Versão 1.1.0-alpha01

4 de agosto de 2021

Lançamento de androidx.compose.ui:ui-*:1.1.0-alpha01. A versão 1.1.0-alpha01 contém estas confirmações.

Mudanças em APIs

  • RelocationRequester.bringIntoView agora aceita um retângulo como parâmetro, o que nos permite mostrar uma parte de um elemento que pode ser composto (Ice2c5, b/194330245).
  • A instância AnimatedImageVector e as APIs relacionadas agora estão no novo módulo androidx.compose.animation:animation-graphics (I60873).
  • Adição de modificador experimental para lidar com solicitações de realocação (I65a97, b/178211874).
  • Introdução da API BrushPainter para compatibilidade com o desenho de um pincel arbitrário em um Painter, semelhante ao ColorPainter.

    Atualização da API Brush para que ela tenha um parâmetro de tamanho intrínseco que seja consultado na BrushPainter (Ia2752, b/189466433).

  • Atualização do método DrawScope#drawImage, que consome os retângulos de origem e destino para consumir um parâmetro FilterFilter opcional. Isso é útil para pixel art, que precisa ficar pixelada ao ser ampliada. Atualização do elemento que pode ser composto BitmapPainter + Image para também consumir um parâmetro FilterFilter opcional (Ie4fb0, b/180311607).

  • Adição do método GestureScope.advanceEventTime para oferecer mais controle sobre o tempo dos eventos em um gesto (Ibf3e2).

Correções de bugs

  • Para oferecer melhor compatibilidade com o encadeamento de modificadores de desenho, a implementação do Modifier.paint precisa chamar drawsContent. Anteriormente, o Modifier.paint era esperado para um nó de folha na cadeia de modificadores, mas isso o impedia de ser configurado em um contêiner que pode ser composto (como uma caixa) ou de adicionar outras decorações na parte superior, como Modifier.paint().border(). Com o Modifier.paint chamando drawContent depois de desenhar o conteúdo do pintor especificado, temos uma consistência de comportamento melhor com o padrão do modificador (Ibb2a7, b/178201337, b/186213275).
  • Agora, as caixas de diálogo seguem o comportamento de tamanho da plataforma. Defina usePlatformDefaultWidth como falso para substituir esse comportamento. (Iffaed, b/192682388).
  • A InfiniteAnimationPolicy foi movida para :compose:ui (I5eb09, b/160602714).
  • A rolagem usando ações semânticas para listas lentas e componentes de rolagem regulares agora é animada (Id9066, b/190742024).

Versão 1.0

Versão 1.0.3

29 de setembro de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.3. A versão 1.0.3 contém estas confirmações.

Atualizações de dependência

  • Atualização para depender do Kotlin 1.5.30.

Versão 1.0.2

1.º de setembro de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.2. A versão 1.2.0 contém estas confirmações.

Atualização para oferecer suporte à versão 1.0.2 do Compose. O Compose 1.0.2 ainda é compatível com o Kotlin 1.5.21.

Versão 1.0.1

4 de agosto de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.1. A versão 1.0.1 contém estas confirmações.

Atualizações de dependência

  • Atualização para depender do Kotlin 1.5.21.

Versão 1.0.0

28 de julho de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0. A versão 1.0.0 contém estas confirmações.

Principais recursos da versão 1.0.0

Esta é a primeira versão estável do Compose. Veja mais detalhes na postagem do blog oficial sobre a versão do Compose (link em inglês).

Problemas conhecidos

  • Se você está usando o Android Studio Bumblebee Canary 4 ou o AGP 7.1.0-alpha04/7.1.0-alpha05, pode ocorrer a seguinte falha:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Para corrigi-la, aumente temporariamente a minSdkVersion para 24+ no arquivo build.gradle. Esse problema será corrigido na próxima versão do Android Studio Bumblebee e no AGP 7.1 (b/194289155).

Versão 1.0.0-rc02

14 de julho de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-rc02. A versão 1.0.0-rc02 contém essas confirmações (link em inglês).

Correções de bugs

  • Agora, as caixas de diálogo seguem o comportamento de dimensão da plataforma. Defina usePlatformDefaultWidth como falso para substituir esse comportamento. (Iffaed, b/192682388)

Versão 1.0.0-rc01

1º de julho de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-rc01. A versão 1.1.0-rc01 contém estas confirmações.

Novos recursos

Mudanças em APIs

  • Remoção de FocusManager#moveFocusIn e FocusManager#moveFocusOut experimentais obsoletos (I227d7, b/170154986, b/186567354, b/168510304)
  • Agora, o Canvas é compatível com o parâmetro contentDescription para acessibilidade (Ib547c).
  • Renomeação de useDefaultMaxWidth em PopupProperties para usePlatformDefaultWidth (I05710).
  • Agora, as caixas de diálogo podem usar toda a largura da tela (I83929, b/190810877).
  • Adição de compatibilidade experimental para representações de cores HSV e HSL (Id7cf8, b/180731008).

Mudanças de comportamento

  • O Compose @Preview agora oferece um LocalActivityResultRegistryOwner que permite visualizar Combináveis que usam APIs como rememberLauncherForActivityResult() que dependem do proprietário já existente (Ib13d1, b/185693006).
  • O Compose @Preview agora oferece um LocalOnBackPressedDispatcherOwner que permite visualizar os compostos que usam APIs como BackHandler que dependem do proprietário já existente (Ia1c05, b/185693006).

Correções de bugs

  • InfiniteAnimationPolicy foi movido para androidx.compose.ui:ui (I5eb09, b/160602714).
  • AnimatedImageVector foi temporariamente removido para mudar a estrutura do módulo (I41906, b/160602714).

Versão 1.0.0-beta09

16 de junho de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta09. A versão 1.0.0-beta09 contém estas confirmações.

Mudanças em APIs

  • Mudança das enumerações Role e LiveRegionMode para classes in-line com construtor privado (Id1890).
  • A KeyboardCapitalization foi convertida em uma classe in-line (Id5a1c).
  • Mudança de HapticFeedbackType para uma classe in-line (I255ec).
  • Modifier.pointerInteropFilter é @ExperimentalComposeUiApi (Iede6c).
  • TextAlign, FontSynthesis e TextDirection agora são classes in-line (I212fe).
  • Mudança de TextOverflow para uma classe in-line (I433af).
  • FontStyle agora é uma classe in-line (I9e48b).

Correções de bugs

  • Por enquanto, as constantes de chave são @ExperimentalComposeUiApi. O código de consumo pode declarar constantes particulares antes da estabilização (Ia5d48).
  • Agora, os testes do Compose podem ser executados no Robolectric. Até o momento, as seguintes limitações foram identificadas:
    • Não há bitmap nativo, então ImageBitmap() leva a uma NullPointerException.
    • Não há desenho, então captureToImage() aguardará indefinidamente a próximo transmissão de desenho (ou seja, há impasses).
    • Nenhuma fonte foi carregada. Por isso, todo texto será medido de forma incorreta. Todos os caracteres têm uma altura fixa de aproximadamente 20 px e largura de 1 px.
    • ComposeTestRule.waitUntil {} não executa a linha de execução principal enquanto está aguardando, ficando efetivamente igual à ComposeTestRule.mainClock.advanceTimeUntil {}. Provavelmente mais limitações serão identificadas no futuro (I284fa).

Regras de perfil adicionadas

Nesta versão, adicionamos as regras de perfil aos seguintes módulos do Compose (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

O que são as regras de perfil?

  • As regras de perfil para uma biblioteca são especificadas em um arquivo de texto baseline-prof.txt localizado no diretório src/main ou equivalente. O arquivo especifica uma regra por linha, em que uma regra, nesse caso, é um padrão para a correspondência de métodos ou classes na biblioteca. A sintaxe dessas regras é um superconjunto do formato de perfil do ART legível que é utilizada ao usar adb shell profman --dump-classes-and-methods .... Essas regras podem ter uma das duas formas destinadas a métodos ou classes.

  • Uma regra de método terá o seguinte padrão:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • E uma regra de classe terá o seguinte padrão:

    <CLASS_DESCRIPTOR>
    
  • Aqui, <FLAGS> é um ou mais dos caracteres H, S e P, para indicar se esse método precisa ser sinalizado como "Hot" (frequente), "Startup" (de inicialização) ou "Post Startup" (pós-inicialização).

  • O <CLASS_DESCRIPTOR> é o descritor da classe à qual o método desejado pertence. Por exemplo, a classe androidx.compose.runtime.SlotTable teria um descritor de Landroidx/compose/runtime/SlotTable;.

  • A <METHOD_SIGNATURE> é a assinatura do método e inclui o nome, os tipos de parâmetro e os tipos de retorno do método. Por exemplo, o método fun isPlaced(): Boolean em LayoutNode tem a assinatura isPlaced()Z.

  • Esses padrões podem ter caracteres curinga (**, * e ?) para que uma única regra inclua vários métodos ou classes.

O que as regras fazem?

  • Um método com a sinalização H indica que ele é um método "hot" (frequente) e precisa ser compilado com antecedência.

  • Um método com a sinalização S indica que ele é chamado na inicialização e precisa ser compilado com antecedência para evitar o custo da compilação e interpretação dele no momento da inicialização.

  • Um método com a sinalização P indica que ele é chamado após a inicialização.

  • Uma classe presente nesse arquivo indica que ela é usada durante a inicialização e precisa ser pré-alocada no heap para evitar o custo do carregamento dela.

Como isso funciona?

  • As bibliotecas podem definir essas regras que serão empacotadas nos artefatos do AAR. Quando um app é criado com esses artefatos, essas regras são mescladas e usadas para criar um perfil do ART binário, compacto e específico para o app. O ART poderá usar esse perfil quando o app for instalado em dispositivos para compilar antecipadamente um subconjunto específico do app e melhorar o desempenho dele, especialmente a primeira execução. Isso não terá efeito nos aplicativos depuráveis.

Versão 1.0.0-beta08

2 de junho de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta08. A versão 1.0.0-beta08 contém estas confirmações.

Mudanças em APIs

  • A enumeração NestedScrollSource foi substituída por uma classe in-line (Ie321b, b/187055290).
  • FocusManager.clearFocus(forcedClear = true) foi renomeado como FocusManager.clearFocus(force = true) (Ia0c41).
  • Refatoração do uso de enumerações para classes in-line de modo a evitar problemas com a adição de instruções quando novos valores de enumeração forem adicionados (I2b5eb).
  • A @ExperimentalComposeUiApi foi removida das PopupProperties (I01fa6).
  • O PointerType foi mudado de uma enumeração para uma classe in-line (If5058).
  • As propriedades de semântica de ContentDescription e Text não são mais valores únicos, mas sim listas. Isso permite mesclá-las sem alterações em vez de como concatenações. Também disponibilizamos APIs de teste melhores para utilizar essas mudanças (Ica6bf, b/184825850).
  • O Modifier.focusModifier() foi descontinuado e substituído por Modifier.focusTarget() (I6c860).
  • Modifier.onSizeChanged() e Modifier.onGloballyPositioned() não são mais funções in-line (I727f6, b/186109675).
  • A enumeração KeyboardType foi substituída por uma classe in-line (I73045, b/187055290).
  • A enumeração FocusState foi substituída por uma interface FocusState (Iccc1a, b/187055290).
  • A enumeração ImeAction foi substituída por uma classe in-line (I18be5, b/187055290).
  • A PlaceholderVerticalAlign foi convertida em uma classe in-line (If6290).
  • TextUnitType agora é uma classe in-line (I4cba9).
  • As funções AnnotatedString.withAnnotation agora são ExperimentalTextApi em vez de ExperimentalComposeApi (I0cd0a).
    • O construtor TextUnit com TextUnitType agora é ExperimentalTextApi em vez de ExperimentalComposeApi.

Correções de bugs

  • Correção do bug introduzido na versão beta07 em que os itens LazyColumn/Row eram exibidos parcialmente após a rolagem (I8c9ac, b/188566058).
  • Agora, detectDragGesures, detectVerticalGestures e detectHorizontalGestures consomem a mudança de posição automaticamente, sem necessidade de chamar change.consumePositionChange nos callbacks onDrag (I42fc4, b/185096350, b/187320697).
  • LayoutModifiers que forneciam linhas de alinhamento foram corrigidos. Correção de um bug em que o elemento pai não era medido novamente quando as linhas de alinhamento dos elementos filhos mudavam (I4401f, b/174315652).
  • O Modifier.onGloballyPositioned() foi mudado para informar as coordenadas desse modificador na cadeia de modificadores, e não as coordenadas de layout depois de aplicar todos os modificadores. Isso significa que agora a ordem dos modificadores afeta as coordenadas que seriam informadas (Ieb67d, b/177926591).

Versão 1.0.0-beta07

18 de maio de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta07. A versão 1.0.0-beta07 contém estas confirmações.

Mudanças em APIs

  • A interface ViewRootForInspector foi adicionada para uso no inspetor (Ib70df).
  • SubcomposeLayoutState agora é compatível com a configuração de contagem de slots reutilizáveis. O layout manterá os slots de contagem ativos, em vez de descartá-los, para reutilizar o slot da próxima vez que um novo for necessário (Ieb981).
  • A enumeração KeyEventType foi substituída por uma classe in-line (Id670a, b/187055290).
  • A enumeração FocusDirection foi substituída por uma classe in-line (Ib6d03, b/187055290, b/184086802).
  • Introdução da possibilidade de elevar o estado de SubcomposeLayout, que permite pré-compor o conteúdo em um slotId obrigatório, o que faria a próxima medição ser transmitida mais rapidamente, porque, quando tentarmos subcompor com o slotId fornecido da próxima vez, não haverá nenhuma composição necessária (I42580, b/184940225).
  • Uma alça de seleção de clipe foi adicionada (Iff80d, b/183408447).
  • As APIs não utilizadas relacionadas à compatibilidade do LayoutInspector foram removidas (I2ac78).

Correções de bugs

  • LazyColumn/Row manterá até dois itens visíveis anteriormente ativos (não descartados), mesmo quando eles já tiverem rolado para fora da tela. Isso permite que o componente reutilize as subcomposições ativas quando precisarmos compor um novo item, o que melhora o desempenho de rolagem (Ie5555).
  • Os TextGeomerticTransform e TextDecoration em AnnotatedString serão aplicados conforme fornecidos (I61900, b/184760917).

Versão 1.0.0-beta06

5 de maio de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta06. A versão 1.0.0-beta06 contém estas confirmações.

Mudanças em APIs

  • Resolução de conflitos com o gesto de navegação (I1145e).
  • @ComposeCompilerApi não mais @RequiresOptIn (Iab690).
  • Novas APIs de acessibilidade CollectionInfo e CollectionItemInfo, que permitem marcar a coleção e os itens relacionados para serviços de acessibilidade (Id54ef, b/180479017).
  • Novo SemanticsActions.ScrollToIndex para rolar uma lista com itens indexados até um item com determinado índice e SemanticsProperties.IndexForKey para ver o índice de um item de uma lista com itens com chave. As duas ações são implementadas por LazyList.
    • Novo SemanticsNodeInteraction.performScrollToIndex, que rola uma lista até o índice especificado, e SemanticsNodeInteraction.performScrollToKey, que rola uma lista até o item com a chave especificada (I4fe63, b/178483889, b/161584524).
  • A ownerViewId foi adicionada a GraphicLayerInfo (I19f62).
  • Novas sobrecargas de Font() para carregar fontes de recursos, File e FileDescriptor (I5d382).
  • Novo error da API de acessibilidade, que permite marcar um nó com uma entrada inválida (I12997, b/180584804, b/182142737).
  • Novas sobrecargas de Font() para carregar fontes de recursos, File e FileDescriptor (I43007).
  • Suporte para salvar a AnnotatedString no TextFieldValue.Saver. As funções utilitárias addTtsAnnotation e withAnnotation foram adicionadas ao AnnotatedString.Builder (I8cbdc, b/178446304).
  • Nova função do construtor TextUnit TextUnit(value: Float, type: TextUnitType) (I7ecce, b/178446304).

Versão 1.0.0-beta05

21 de abril de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta05. A versão 1.0.0-beta05 contém estas confirmações.

Mudanças em APIs

  • Adição de FocusManager.moveFocus(In) e FocusManager.moveFocus(Out) experimentais (Ic5534, b/183746743)
  • Adição da API experimental performTextInputSelection (I2dcbb, b/178510628)
  • A interface InputEventCallback está com uso suspenso. Não era possível usar a interface em nenhuma API pública e não havia utilidade no código (I34a02, b/184003208).
  • Função TextLayoutResult/createTextLayoutResult com uso suspenso. Trata-se de uma função pública não utilizada que foi adicionada para teste. A função não faz nada que possa ser utilizado para compor APIs de texto. A função está com uso suspenso e será removida mais tarde (I80413).

Correções de bugs

  • Correção das ações de rolagem de acessibilidade em ACTION_SCROLL_FORWARD, ACTION_SCROLL_BACKWARD, accessibilityActionScrollLeft, accessibilityActionScrollUp, accessibilityActionScrollRight e accessibilityActionScrollDown. Em vez de rolar até o final, agora ele irá rolar por uma tela na direção indicada (Ieccb0).
  • Os arquivos AndroidManifest de ui-test-manifest e ui-tooling-data agora são compatíveis com o Android 12 (I6f9de, b/184718994).

Versão 1.0.0-beta04

7 de abril de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta04. A versão 1.0.0-beta04 contém estas confirmações.

Mudanças em APIs

  • Renomeie hideSoftwareKeyboard e showSoftwareKeyboard em SoftwareKeyboardController para hide() e show(), respectivamente.
    • Fornecimento da interface completa do CompositionLocal para LocalSoftwareKeyboardController, possibilitando que ela seja definida já que é especialmente útil em testes (I579a6).
  • Adição da API de acessibilidade LiveRegion. Se o nó estiver marcado como uma região ativa, os serviços de acessibilidade notificarão automaticamente o usuário sobre as mudanças (Idcf6f, b/172590946).
  • Introdução de TextOverflow.Visible (Ic8f89).

Correções de bugs

  • Correção do problema que ocorria quando os itens de LazyColumn/LazyRow localizados nas bordas eram posicionados incorretamente depois da rolagem rápida (Ie4d13, b/183877420).
  • AndroidViewBinding agora remove corretamente os fragmentos inflados pela FragmentContainerView quando o AndroidViewBinding é removido da hierarquia de composição (Ib0248, b/179915946).
  • AndroidViewBinding agora aninha corretamente os fragmentos inflados ao usar a FragmentContainerView quando a ComposeView está dentro de um Fragment, corrigindo problemas ao salvar e restaurar o estado dele (I70eb0, b/179915946).
  • O Compose ViewBinding agora depende do Fragment 1.3.2 e agora mostra de maneira consistente os fragmentos inflados usando FragmentContainerView após as mudanças na configuração (I0743d, b/179915946).

Versão 1.0.0-beta03

24 de março de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta03. A versão 1.0.0-beta03 contém estas confirmações.

Mudanças em APIs

  • Verificação adiada para dependências da ViewTree e da ComposeView (I8dbbf, b/182466548).
  • Parâmetros startX/endX e startY/endY opcionais foram adicionados às funções swipeUp/swipeDown/swipeLeft/swipeRight no GestureScope (I49e2d, b/182063305).

Versão 1.0.0-beta02

10 de Março de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-beta02. A versão 1.0.0-beta02 contém estas confirmações.

Mudanças em APIs

  • A nova API local de composição LocalSoftwareKeyboardController foi acionada para substituir a interface SoftwareKeyboardController anterior no TextField (I5951e, b/168778053).
  • A nova API local de composição LocalSoftwareKeyboardController foi acionada para substituir a interface SoftwareKeyboardController anterior no TextField (I84472, b/168778053).
  • Os seguintes SemanticsMatchers foram removidos:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (If16bd)
  • Marcamos o seguinte SemanticsMatchers como @ExperimentalTestApi:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (Ia600c)
  • Os seguintes SemanticsMatchers foram adicionados:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (I2f502)

Correções de bugs

  • Aplicação de restrições ao uso público de APIs experimentais (I6aa29, b/174531520).
  • androidx.compose.ui:ui não depende mais de AppCompat ou Fragment. Se você estiver usando uma ComposeView no aplicativo e estiver usando Fragment e/ou AppCompat, verifique se está usando AppCompat 1.3 / Fragment 1.3 ou mais recentes. Essas versões são necessárias para definir corretamente os proprietários do ciclo de vida e de estado salvo necessários para uma ComposeView (I1d6fa, b/161814404).
  • Correção de rememberSaveable { mutableStateOf(0) } corrompidos quando usados dentro de um destino navigation-compose (I1312b, b/180042685, b/180701630).
  • A nova API local de composição LocalSoftwareKeyboardController foi acionada para substituir a interface SoftwareKeyboardController anterior no TextField (I658b6, b/168778053).
  • Correção da rara NoSuchElementException no tearDownRegistry() de ComposeRootRegistry (Iddce1).

Versão 1.0.0-beta01

24 de fevereiro de 2021

Lançamento do androidx.compose.ui:ui-*:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.

Esta é a primeira versão do Compose 1.0.0 Beta.

Mudanças em APIs

  • O callback onStart foi adicionado a detectDragGestures (I67269, b/179995594).
  • Modificadores de tamanho para intrínsecos não são mais experimentais (I15744).
  • O MeasureBlocks foi renomeado como MeasurePolicy, que se tornou uma interface divertida. As APIs de layout foram atualizadas / simplificadas para usar MeasurePolicy (Icab48, b/167662468, b/156751158).
  • InteractionState foi substituído por [Mutable]InteractionSource.
    • As interfaces são responsáveis por emitir / coletar eventos de interação.
    • Em vez de transmitir interactionState = remember { InteractionState() } para componentes como Button e Modifier.clickable(), use interactionSource = remember { MutableInteractionSource() }.
    • Em vez de: Interaction.Pressed in interactionState, use as funções de extensão em InteractionSource, como InteractionSource.collectIsPressedAsState().
    • Para casos de uso complexos, use InteractionSource.interactions para observar o fluxo de interações. Consulte as amostras e a documentação do InteractionSource para mais informações
    • (I85965, b/152525426, b/171913923, b/171710801, b/174852378).
  • Adição da interface AccessibilityMananger e LocalAccessibilityMananger em CompositionLocals (I53520).
  • Remoção dos métodos LayoutCoordinates suspensos. Use a função em vez da propriedade para positionInParent e boundsInParent (I580ed, b/169874631, b/175142755).
  • Typealiases substituídos por tipos subordinados:
    • ColorStop agora é Pair<Float, Color>
    • SpanStyleRange agora é AnnotatedString.Range
    • ParagraphStyleRange agora é AnnotatedString.Range<ParagraphStyle>
    • StringAnnotation agora é AnnotatedString.Range<String>
    • (I8dd1a)
  • Criação da nova TextInputSession para sessões de entrada pelos componentes de texto de baixo nível, como o CoreTextField (I8817f, b/177662148).
  • Placeable agora expõe measuredSize, representando o tamanho para o qual o layout filho é realmente medido. Esse tamanho pode não respeitar as restrições de medidas (Ib2729, b/172560206, b/172338608).
  • Adição do modificador selectionGroup que permite marcar a coleção de Tabs e RadioButtons para fins de acessibilidade (Ie5c29).
  • A defaultFactory para compositionLocalOf e staticCompositionLocalOf agora é obrigatória, não opcional.

    Essa mudança remove um possível erro para tipos não anuláveis, em que nenhuma fábrica padrão era fornecida. Anteriormente, isso forneceria uma referência nula para um tipo não anulável.

    Para tipos anuláveis, considere fornecer { null } como a fábrica padrão.

    Não recomendamos o uso de locais com tipos não anuláveis, a menos que um padrão simples possa ser fornecido. Se não houver esse padrão, o lambda defaultFactory gerará uma exceção. No entanto, isso significa que os consumidores do local terão uma dependência implícita sendo fornecida, mas não aplicada pelo sistema de tipos (Ifbd2a).

  • Os métodos suspensos de módulos de IU foram removidos (I646f6).

  • Os modificadores de tamanho foram renomeados. Modifier.width/height/size foi renomeado como requiredWidth/requiredHeight/requiredSize. Modifier.preferenceWidth/preferenceHeight/preferencialSize foi renomeado como width/height/size (I5b414).

  • O Modifier.tapGestureFilter foi removido. Use Modifier.pointerInput { detectTapGestures(...) } (I266ed, b/175294473).

  • O consumo parcial foi removido do sistema de entrada do ponteiro. A forma recomendada de coordenar o consumo parcial é Modifier.nestedScroll (Ie9c9b).

  • A orientação foi movida para o pacote básico. VelocirtTracker foi movido de ui.gesture para ui.input.pointer (Iff4a8, b/175294473).

  • imageResource e vectorResource agora são funções de extensão nos elementos complementares ImageBitmap e ImageVector, respectivamente. As funções load{Image,Vector,Font}Resource foram excluídas (I89130).

  • AnimationClockObservable e subclasses foram removidos. AnimatedFloat foi removido (Icde52, b/177457083).

  • Providers foi renomeado como CompositionLocalProvider.

    • O construtor Composition não aceita mais um parâmetro chave e foi descontinuado.
    • currentCompositeKeyHash foi transformado em uma propriedade de nível superior que pode ser composta em vez de uma função de nível superior que pode ser composta.
    • CompositionData e CompositionGroup foram movidos para o namespace androidx.compose.runtime.tooling
    • ComposableLambda foi transformada em uma interface em vez de uma classe concreta e não tem mais parâmetros de tipo.
    • ComposableLambdaN foi transformada em uma interface em vez de uma classe concreta e não tem mais parâmetros de tipo.
    • A função snapshotFlow foi movida para o namespace androidx.compose.runtime.
    • O método de mesclagem de SnapshotMutationPolicy não é mais experimental.
    • A função clearRoots de nível superior de @TestOnly foi removida. Ela não é mais necessária.
    • As funções keySourceInfoOf e resetSourceInfo foram removidas. Elas não são mais necessárias.
    • Composer.collectKeySourceInformation foi removido. Ele não é mais necessário.
    • Os métodos isJoinedKey, joinedKeyLeft e joinedKeyRight foram removidos. Eles não são mais necessários.
    • Várias APIs de nível superior foram movidas e reorganizadas em arquivos diferentes. Devido à semântica de classe de arquivos do Kotlin, essa mudança corrompe a compatibilidade binária, mas não a compatibilidade com a origem. Portanto, isso não deve ser um problema para a maioria dos usuários
    • (I99b7d, b/177245490).
  • ComponentActivity.setContent() foi removido de compose:ui. Use o de androidx.activity:activity-compose:1.3.0-alpha01. viewModel() e LocalViewModelStoreOwner foram removidos de compose:ui. Use os de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 (I6f36b).

  • O Modifier.scrollable foi reformulado. Agora, ele usa a interface Scrollable em vez da classe ScrollableController (I4f5a5, b/174485541, b/175294473).

  • A compatibilidade com CustomEvens do PointerInputModifier foi removida (I02707, b/175294473).

  • SnapshotStateObserver não é mais experimental (Id2e6a).

  • Algumas APIs anteriormente suspensas foram excluídas (Ice5da, b/178633932).

  • longPressGestureFilter e doubleClickGestureFilter foram removidos. Use Modifier.pointerInput com funções auxiliares, como detectTapGestures (I2fedf, b/175294473).

  • Remoção dos usos refatorados da API String.format em vários métodos toString para não aproveitar o String.format internamente (Id1290).

  • Remoção das declarações dp (I798d2).

  • Remoção de androidx.compose.runtime:runtime-dispatch (I55feb).

  • As ações de texto agora verificam o foco automaticamente (I13777, b/179648629).

  • Remoção de runBlockingWithManualClock (I15cdc, b/179664814).

  • A posição de rolagem em Modifier.verticalScroll()/horizontalScroll() agora é representada com o Ints (I81298).

  • O FlingConfig foi renomeado como FlingBehavior e agora permite a personalização da animação suspensa em vez da redução de valores predefinidos (I02b86, b/175294473).

  • Adição de uma função auxiliar útil para definir a mesma ação para todos os callbacks ImeAction (I63447, b/179226323).

  • Remoção do callback SoftwareKeyboardController de todos os campos de texto para ser substituído por uma nova API em breve (Iae869, b/168778053).

  • FontSpan e FontWeigthStyleSpan não são mais usados e foram removidos (Ie5b56, b/177423444).

  • Foram feitas as seguintes mudanças na API do Material Design:

    • Adição do parâmetro contentPadding a Top/BottomAppBar para permitir a personalização do padding padrão.
    • Os parâmetros foram reordenados no BackdropScaffold para seguir as diretrizes da API para os parâmetros obrigatórios antes dos opcionais.
    • O parâmetro icon em BottomNavigationItem foi movido para depois de selected e onClick.
    • O parâmetro alwaysShowLabels em BottomNavigationItem foi renomeado como alwaysShowLabel.
    • Os parâmetros bodyContent em alguns componentes foram renomeados como content.
    • Parâmetros reordenados em ButtonDefaults.buttonColors(). Como o tipo dos parâmetros não mudou, isso não causará um erro no seu código. Confira se está usando parâmetros nomeados ou atualize a ordem manualmente, caso contrário o código não funcionará da mesma forma que antes.
    • Adição do parâmetro secondaryVariant a darkColors(). Essa cor costuma ser a mesma que secondary no tema escuro, mas é adicionada para consistência e maior personalização.
    • Como ElevationDefaults e animateElevation() não eram muito usados / úteis, eles foram removidos da plataforma da API pública.
    • onValueChangeEnd em Slider foi renomeado como onValueChangeFinished e transformado em anulável.
    • O parâmetro text em Snackbar foi renomeado como content para manter a consistência.
    • Adição do parâmetro contentPadding a DropdownMenuItem para permitir a personalização do padding padrão. Além disso, content passou a ser uma extensão em RowScope.
    • Renomeação de ModalDrawerLayout como ModalDrawer.
    • Renomeação de BottomDrawerLayout como BottomDrawer
    • (I1cc66).

Correções de bugs

  • Adição da API para usar recursos AnimatedVectorDrawable no Compose. Use animatedVectorResource para carregar um XML <animated-vector> como um AnimatedImageVector e anime-o com painterFor (I8ea91).
  • Adição da nova API local de composição LocalSoftwareKeyboardController para substituir a interface SoftwareKeyboardController anterior no TextField (I658b6, b/168778053).

Versão 1.0.0-alpha12

10 de fevereiro de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha12. A versão 1.0.0-alpha12 contém estas confirmações.

Mudanças em APIs

  • A compatibilidade com ViewGroups foi removida do UiApplier. Os elementos que podem ser compostos emitView com uso suspenso foram removidos (Ifb214).
  • Agora, Modifier.pointerInput requer que as chaves remember indiquem quando a corrotina de detecção de entrada do ponteiro precisa ser reiniciada para novas dependências (I849cd).
  • CompositionReference foi renomeada como ComposeContext (I53fcb).
  • Bounds foi renomeado como DpRect (I4b32a).
  • Atualização de testes: hasText() verificará se há texto de entrada e de etiqueta/dica/marcador no campo de texto (Iab803).
  • O elemento que pode ser composto viewModel() e o LocalViewModelStoreOwner foram movidos para androidx.lifecycle.viewmodel.compose. Para usá-los, será necessário adicionar uma dependência separada do androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 (I7a374).
  • Permissão de ação anulável em AccessibilityAction e mudança de rótulo de ação em AccessibilityAction e CustomAccessibilityAction de CharSequence para String (I0dc82).
  • Para se adequar melhor às convenções de nomenclatura com ImageBitmap e ImageVector, o ImagePainter foi renomeado como BitmapPainter para o VectorPainter paralelo (Iba381, b/174565889).
  • Melhoria das APIs de teste de substring que agora usam substrings como argumentos (Icbe78).
  • Adição de um Modifier.focusOrder() que aceita um FocusRequester sem especificar uma ordem de foco personalizada como lambda. Isso é útil quando precisamos apenas especificar uma referência, mas não uma ordem de foco personalizada para um elemento que pode ser composto (I4f52a, b/179180978).
  • ComponentActivity.setContent foi movido para androidx.activity.compose.setContent no módulo androidx.activity:activity-compose (Icf416).
  • Os métodos de desestruturação e copy() foram removidos de várias classes em que raramente eram usados (I26702, b/178659281).
  • O pop-up foi movido para ser específico da plataforma. AndroidPopupProperties foi renomeado como PopupProperties, e isFocusable foi movido para um parâmetro focusable em PopupProperties (Ieeea5).
  • Caixa de diálogo movida para ser específica da plataforma. Renomeação de AndroidDialogProperties para DialogProperties (I4ef69, b/179138130).
  • LayoutNode passou a ser interno (I8a7b1, b/175103944).
  • Constraints.enforce foi substituído por Constraints.constrain (I8b8ea).
  • O uso de loadFontResource foi suspenso. Use fontResource. O uso de imageResource, loadImageResource, vectorResource e loadVectorResource foi descontinuado. Use painterResource (I6b809).
  • Por motivos de desempenho, a semântica ScrollAxisRange agora usa lambdas que retornam Floats em vez de valores Float diretos (If4a35, b/178657186).
  • Adição da semântica EditableText para marcar o texto de entrada editável do campo para acessibilidade e os métodos de teste correspondentes para verificar a semântica (I8e07a).
  • OwnerLayer/OwnerScope/OwnerSnapshotObserver passaram a ser internos (I4ffaf, b/175103944)
  • toIntPx() foi renomeado como roundToPx() (I9b7e4, b/173502290).
  • IntBounds foi renomeado como IntRect, e a API foi aprimorada (I1f6ff).
  • A API Snapshot foi atualizada para ser mais consistente com as diretrizes da API, bem como com a ocultação de classes de implementação internas da API pública (Id9e32).
  • Adição de ações de semântica de expansão e recolhimento. Adição de expansão e halfExpand em ModalBottomSheetState (Ib5064).
  • O uso de Modifier.dragGestureFilter foi suspenso. Use Modifier.pointerInput { detectDragGestures (...)}. Outra opção é usar Modifier.draggable para arrastar apenas um eixo (I0ba93, b/175294473).
  • Ambients foi renomeado para corresponder à renomeação de Ambient como CompositionLocal. Ambients costumava ser chamado de AmbientFoo. Agora, CompositionLocals será chamado de LocalFoo (I2d55d).
  • O BaseTextField de uso suspenso foi removido. Use BasicTextField (I71368).
  • A seleção foi movida para a base (I7892b).
  • Da mesma forma que removemos o state { 0 } que pode ser composto e agora passamos a promover o uso como remember { mutableStateOf(0) }, removeremos o savedInstanceState { 0 } que pode ser composto. Use rememberSaveable { mutableStateOf(0) } para salvar e restaurar automaticamente se o tipo usado dentro de MutableState puder ser armazenado no pacote. Se você transmitia um objeto de economia personalizado, agora precisará usar uma nova sobrecarga de rememberSaveable, que tem o parâmetro stateSaver. O uso será assim: val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) } (Ib4c26, b/177338004).
  • Adição de semântica de senha para acessibilidade (I231ce).
  • Adição de ProgressBarRangeInfo.Indeterminate para marcar barras de progresso indeterminadas para acessibilidade (I6fe05).
  • O uso dos utilitários emptyContent() e (@Composable () -> Unit).orEmpty() foi suspenso por não terem mais valor ou impacto positivo no desempenho (I0484d).
  • snapshotFlow e withMutableSnapshot não são mais experimentais (I6a45f).
  • Os recompositores agora podem ser fechados. Os recompositores fechados continuarão a recomposição até que as corrotinas filhas sejam compostas. Recomposer.shutDown foi renomeado para eliminar o contraste com o fechamento (Ib6d76).
  • UiSavedStateRegistry foi renomeado para SaveableStateRegistry, AmbientUiSavedStateRegistry foi renomeado para AmbientSaveableStateRegistry e ambos foram movidos para o pacote androidx.compose.runtime.saveable (I30224).
  • O artefato androidx:compose:runtime:runtime-saved-instance-state foi renomeado como androidx:compose:runtime:runtime-saveable (I6dcac).
  • Muitas APIs antigas que tiveram o uso suspenso no pacote da IU foram excluídas (I2f2dc).
  • O uso do artefato compose:runtime-dispatch foi suspenso. MonotonicFrameClock agora pode ser encontrado em compose:runtime, e AndroidUiDispatcher pode ser encontrado em compose:ui (Ib5c36).
  • As classes Outline.* não são mais classes de dados (I4879e, b/178001427).
  • Remoção de view.captureToImage() sem nenhuma substituição (I7fcd2).
  • Introdução da API ColorMatrix usada para modificar valores RGB da API Refactored ColorFilter de conteúdo de origem para ser uma interface e corresponder à implementação de PathEffect (Ica1e8).
  • Adição do parâmetro layoutDirection ao createOutline de Shape. Isso permite criar formas com reconhecimento da direção do layout (I57c20, b/152756983).
  • O uso de onImeActionPerformed foi suspenso. Use KeyboardActions (If0bbd, b/179071523).
  • Introdução de um elemento de contexto de corrotina InfiniteAnimationPolicy que será aplicado em animações infinitas. Por padrão, nenhuma política é instalada, exceto durante a execução de testes com ComposeTestRule (I50ec4, b/151940543).
  • canDrag foi removido de Modifier.scrollable (Id66e7, b/175294473).
  • Renomeação de LayoutCoordinates.parentCoordinates como LayoutCoordinates.parentLayoutCoordinates para permitir uma nova propriedade parentCoordinates. A propriedade parentCoordinates agora oferece os LayoutCoordintes do modificador pai. Isso tornará os casos de uso mais completos para onSizeChanged() e onGloballyPositioned() (Idfbfd, b/177926591).
  • O uso de tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter e pressIndicaitonGestureFilter foi suspenso. Use Modifier.clickable ou Modifier.pointerInput com a função detectTapGestures (I6baf9, b/175294473).
  • O unregisterProvider de SaveableStateRegistry foi removido. Agora, registerProvider() retorna o objeto SaveableStateRegistry.Entry, que você pode usar para cancelar inscrição (Ic4274, b/178583739).
  • rememberSavedInstanceState() foi renomeado como rememberSaveable() e movido para o pacote androidx.compose.runtime.saveable (I1366e, b/177338004).
  • Remoção de CoreText e CoreTextField da API pública.
      .
    • Remoção da sobrecarga SelectContainer de uso suspenso
    • (I99c19).
  • Os testes em que o Compose é usado em hierarquias adicionadas ou removidas diretamente do WindowManager agora são mais estáveis (Ie81ed, b/175765614).
  • Remoção de Recomposer.current(). Por padrão, [Abstract]ComposeView agora usa recompositores criados de forma lenta e com escopo de janela gerados pelo ViewTreeLifecycleOwner para a janela. As marcações de animação com base em withFrameNanos e em recomposição serão pausadas enquanto o ciclo de vida do host estiver parado (I38e11).
  • O Recomposer.runningRecomposers agora oferece um StateFlow global de RecomposerInfo somente leitura para observar o estado de composição em andamento no processo. Use essa API em vez de Recomposer.current(), que agora teve o uso suspenso (If8ebe).
  • Saver, listSaver(), mapSaver() e autoSaver foram movidos de androidx.compose.runtime.savedinstancestate para androidx.compose.runtime.saveable (I77fe6).
  • Os EditCommands aceitam AnnotatedString. No entanto, essa é uma mudança apenas na API, e a edição de texto em vários estilos ainda não foi implementada (I4c3ea).
  • O tempo de atividade e a duração foram removidos (Ib9bf4, b/177420019).
  • ComposeData.asTree() e APIs relacionadas foram movidas para o módulo ui-tooling-data separado e marcadas como experimentais (Ic95b8).
  • Os parâmetros em RounderCornerShape, CutCornerShape e CornerBasedShape foram renomeados de esquerda/direita para início/fim para oferecer compatibilidade com o espelhamento automático do formato na direção RTL. AbsoluteRounderCornerShape e AbsoluteCutCornerShape foram introduzidos para os casos em que o espelhamento automático não é desejado (I61040, b/152756983).
  • A API à qual o plug-in do compilador do Compose é destinado foi refatorada para usar uma interface em vez de uma classe concreta. A interface também não usa mais um parâmetro de tipo.

    Essa é uma mudança interna que não afeta a compatibilidade do código-fonte, mas é uma alteração interruptiva binária (I3b922, b/169406779).

  • Remoção da função pública StringBuilder.deleteAt não intencional (Id6ed9).

Correções de bugs

  • ComposeViews colocadas em hierarquias de visualização que são filhas de outra composição agora hospedam composições filhas dos ancestrais (I92883).
  • Atualização da API imageFromResource da composição para reutilizar o cache de drawable de recurso ao carregar objetos ImageBitmap (If3627, b/178751994).

Versão 1.0.0-alpha11

28 de janeiro de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha11. A versão 1.1.0-alpha11 contém estas confirmações.

Mudanças em APIs

  • WithConstraints foi reformulada como BoxWithConstraints e movida para foundation.layout (I9420b, b/173387208).
  • O uso de Key.DPadUp foi suspenso. Use Key.DirectionUp (Iab335, b/177954892).
  • A interface do proprietário é interna a partir de agora (If8e35).
  • Adição da API FocusManager.moveFocus() para mover o foco de forma programática (I045cb, b/177681839).
  • Mudança de PopupPositionProvider para usar coordenadas relativas à janela em vez de coordenadas globais. Renomeação de parentGlobalBounds como anchorBounds e mudança de windowGlobalBounds para windowSize: IntSize (I2994a).
  • Duration e Uptime serão substituídos por milissegundos Long, e esta etapa removerá a dependência de entrada do ponteiro nessas classes (Ia33b2, b/175142755, b/177420019).
  • AmbientSavedStateRegistryOwner foi adicionado de forma semelhante aos já existentes AmbientLifecycleOwner e AmbientViewModelStoreOwner (I9a3e8, b/176756365).
  • A API de gráficos vetoriais foi atualizada para ser compatível com a análise de tonalidades aplicada à raiz dos gráficos vetoriais (Id9d53, b/177210509).
  • Adição de toolType a PointerInputChange para diferenciar dispositivos (Iac787, b/175142755).
  • AmbientWindowManager foi renomeado como AmbientWindowInfo (I2686a, b/177084714, b/177084983).
  • Suspensão do uso dos métodos de coordenadas globais e criação de novos métodos de coordenadas baseados em janela (Iee284).
  • Adição de Modifier.toolingGraphicsLayer, que adiciona um modificador de camada gráfica quando a inspeção é ativada (I315df).
  • FocusRequester.createRefs agora está marcado como experimental, já que pode sofrer alterações (I2d898, b/177000821).
  • SemanticsPropertyReceiver.hidden foi renomeada como invisibleToUser e marcada como @ExperimentalComposeUiApi. AccessibilityRangeInfo foi renomeado como ProgressBarRangeInfo. stateDescriptionRange foi renomeado como progressBarRangeInfo. AccessibilityScrollState foi renomeado como ScrollAxisRange. horizontalAccessibilityScrollState foi renomeado como horizontalScrollAxisRange. verticalAccessibilityScrollState foi renomeado como verticalScrollAxisRange (Id3148).
  • Remoção de PointerInputData e mudança de PointerInputChange para fornecer todos os campos de PointerInputData. PointerInputEvent e PointerInputEventData agora são internos porque não são usados em nenhuma API pública (Ifff97, b/175142755).
  • Atualização da implementação de densidade do GraphicsLayerScope para oferecer compatibilidade com as conversões de dp em pixels brutos (Ied528, b/176819695).
  • A API de matriz foi atualizada para seguir a ordem principal das linhas e fornecer constantes de índice para auxiliar nas conversões entre diferentes representações de matrizes para corresponder à lógica de conversão do framework entre SkMatrix e Matrix4 internamente (I432e6).
  • Remoção dos métodos monotonicFrameAnimationClockOf experimentais (Ib753f, b/170708374).
  • String.fintPrecedingBreak e String.fingFollowingBreak foram movidos para a InternalTextApi (I657c4).
  • Remoção de androidx.compose.ui.util.isSurrogatePair da API pública (Ia9494).
  • Renomeação de TransformedText.transformedText para TransformedText.text
    • TransformedText não é mais uma classe de dados (Ie672a).
  • data class foi removido das seguintes classes:
    • InlineTextContent
    • LocaleList (I605c7).
  • As seguintes classes não são mais classes de dados:
    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99).
  • Alteração de VisualTransformation para ser uma interface funcional (I3bba4).
  • Adição de um tipo de parâmetro de referência de função (I5e1bd).
  • Adição de limites transformados ao InspectorNode (Ice42f).

Correções de bugs

  • O uso de onCommit, onDispose e onActive foi suspenso em favor das APIs SideEffect e DisposableEffect (If760e).
  • Mudanças nas funções de fábrica de Font/FontFamily/Typeface

    • Foram adicionadas funções de fábrica que começam com letra maiúscula.
    • Funções antigas de fábrica com letras minúsculas foram suspensas.
    • As novas funções de fábrica retornam a FontFamily em vez das subclasses.
    • Os construtores das subclasses foram ocultados para que só possam ser construídos pelas funções de fábrica.
    • Renomeação de Font.asFontFamily como Font.toFontFamily (I42aa7).
  • Introdução de ComposeContentTestRule, que estende ComposeTestRule e define setContent, que foi removido de ComposeTestRule. Adição de um método de fábrica createEmptyComposeRule() que retorna uma ComposeTestRule e não inicia uma atividade para você. Use isso quando quiser iniciar a atividade durante o teste, por exemplo, usando ActivityScenario.launch (I9d782, b/174472899).

  • animateAsState agora é animateFooAsState, em que Foo é o tipo da variável sendo animada. Por exemplo, Float, Dp, Offset etc (Ie7e25).

  • Adição do parâmetro de descrição de conteúdo a Image e Icon. Ele é usado para fornecer a descrição para os serviços de acessibilidade (I2ac4c).

  • Remova displaySize, porque isso precisa ser evitado. Normalmente, é melhor usar o tamanho de onRoot() ou pelo menos o tamanho da janela (I62db4).

  • OnSizeChanged estava relatando o tamanho do conteúdo do layout. Agora, ele informa o tamanho na posição em que está na cadeia do modificador (I36b78, b/177562900).

  • A API emit() teve o uso suspenso e foi renomeada como ComposeNode. As APIs são idênticas, apenas um nome diferente para seguir as convenções de nomenclatura do Compose (I4137b).

  • TextFieldValue aceita AnnotatedString. No entanto, essa é uma mudança apenas na API, e a edição de texto em vários estilos ainda não foi implementada.

    • initial foi removido dos parâmetros do construtor EditingBuffer (I326d5).
  • O uso de invalidate e writingReference() foi suspenso em favor de currentRecomposeScope e RememberComAnnotationReference, respectivamente (I583a8).

  • AnnotatedString foi alterada para ser estendida de kotlin.CharSequence. Portanto, length e subSequence agora são funções de instância, e as funções de extensão foram removidas (Iaf429).

  • O RememberObserver substituiu o CompositionLifecycleObserver, e o CompositionLifecycleObserver teve o uso suspenso.

    RememberObserver é uma substituição de CompositionLifecycleObserver com semânticas modificadas e métodos renomeados. A mudança para a nova API pode ser feita de maneira mecânica para objetos que são lembrados apenas uma vez e continua a ser a prática recomendada. No entanto, se uma referência foi lembrada mais de uma vez em uma composição, onRemembered é chamado para cada referência em que onEnter é chamado apenas uma vez. onEnter era chamado várias vezes se o objeto fosse usado em subcomposições, como WithConstraints e Scaffold, tornando a única garantia de chamada de onEnter não confiável, e foi removido para RememberObserver.

    RememberObserver adiciona onAbandoned, que é chamado se a instância de RememberObserver é retornada do callback transmitido para remember, mas não é lembrada no estado de composição e, portanto, nunca terá a chamada de onRemembered. Isso poderá ocorrer se uma exceção encerrar a composição antes que ela seja concluída ou se a composição for descartada porque o estado para o qual ela estava produzindo uma composição não é mais atual ou necessário. Se a instância de RememberObserver após a recomendação de referência única acima estiver acompanhando um recurso externo, onForgotten e onAbandoned indicam que o recurso não é mais necessário. Se o objeto estiver rastreando o trabalho iniciado ou os recursos alocados em onRemembered, onAbandoned poderá ser ignorado, porque ele não será chamado se onRemembered for chamado (I02c36).

  • Operações aritméticas entre 2 ou mais TextUnits foram suspensas. As funções TextUnit.Sp e TextUnit.Em foram suspensas para dar preferência às funções de extensão, como Int.sp e Int.em (I48369).

  • Os recursos em bibliotecas sem recursos declarados explicitamente como públicos (por exemplo, com public.xml) agora são particulares por padrão (Ia1dcc, b/170882230).

  • O uso de ScrollableColumn/Row foi suspenso. O uso do ScrollableColumn é menos eficiente se comparado ao LazyColumn quando você tem um conteúdo de rolagem grande, porque com o LazyColumn, só é possível escrever, medir ou desenhar elementos visíveis. Para evitar que os usuários escolhessem uma forma não eficiente, decidimos suspender o uso de ScrollableColumn e de ScrollableRow e, em vez disso, promover o uso de LazyColumn e LazyRow. Os usuários ainda podem decidir que não precisam do comportamento lento e usar os modificadores diretamente como Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083).

  • Novo método de fábrica items(count: Int) para o escopo de LazyColumn/LazyRow/LazyVerticalGrid. items(items: List) e itemsIndexed(items: List) agora são funções de extensão, portanto, você precisa importá-las manualmente quando as usar. Novas sobrecargas de extensão para matrizes: items(items: Array) e itemsIndexed(Array) (I803fc, b/175562574).

  • Use ImeAction.None em vez de ImeAction.NoAction.

    • Use ImeAction.Default em vez de ImeAction.Unspecified (Ie1bcc).
  • Experimente usar o TestCoroutineDispatcher nos testes (I532b6).

  • Renomeação de TextInputService.onStateUpdated como updateState (Id4853).

  • A Transition baseada em TransitionDefinition foi suspensa (I0ac57).

  • TextUnitType.Inherit foi removido. Use TextUnitType.Unspecified (I9ff64).

Versão 1.0.0-alpha10

13 de janeiro de 2021

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha10. A versão 1.0.0-alpha10 contém estas confirmações.

Alteração interruptiva

  • A reestruturação da API do compilador interno permite criar lotes de mudanças nos nós gerados como resultado da composição na fase de "aplicar mudanças", após a conclusão de todas as funções @Composable.

    Essa é uma mudança comportamental que pode afetar o código do aplicativo, já que os nós não estão mais disponíveis em APIs internas e experimentais até que as mudanças sejam aplicadas. Isso pode ser resolvido com código circundante com dependências em um composto SideEffect para adiar a execução do código até que os nós tenham sido criados e inicializados (I018da).

Mudanças em APIs

  • Adição de Modifier.focusOrder() que pode ser usado para especificar uma ordem de travessia de foco personalizada (I90cf5, b/175899543, b/170155556, b/170155429).
  • Remoção de focusObserver obsoleto. Use onFocusChanged ou onFocusEvent (I3ecb9, b/175156387).
  • Mudanças na API EditOperations.
    • Renomeação de EditOperation como EditCommand.
    • Adição do sufixo Command para implementações concretas do EditOperation.
    • EditCommands não são mais classes de dados.
    • Renomeação da função EditOperation.process como applyTo.
    • Renomeação de InputEventListener como InputEventCallback
    • (I0a366).
  • Remoção de Px Squared, PxCubed, PxInverse. Alteração de Size.center() para ser uma propriedade (I973f7).
  • O módulo ui-test agora poderá configurar a criação de Recompositores para IUs em teste (Ibebd8).
  • Modificação de Velocity para ter partes de componentes e operações matemáticas (Ib0447).
  • @ExperimentalTesting foi renomeado para @ExperimentalTestApi para ser consistente com anotações de API experimentais semelhantes (Ia4502, b/171464963).
  • Renomeação de Color.useOrElse() como Color.takeOrElse() (Ifdcf5).
  • Foram removidas as classes DpInverse, Dp Squared e DpCubed (I4d62b).
  • Constraints#satisfiedBy foi renomeado como isSatiendedBy (I9cf5c).
  • Adição de callback para notificar o proprietário quando os limites do layoutnode mudam (I72fd1).
  • Adição de isSpecified, isUnspecified e useOrElse para classes in-line com uma constante Unspecified (I93f7b, b/174310811).
  • Expansão das APIs [Abstract]ComposeView para permitir a reciclagem de visualizações baseadas no Compose, descartando a composição delas para recriar novamente mais tarde. Adição de APIs para instalar e descobrir Recomposers e CompositionReferences com escopo de janela para criar composições filhas.

    Adição do ViewComposeStrategy para configurar a estratégia de descarte de composição do [Abstract]ComposeViews. O comportamento padrão é descartar na remoção da janela (I860ab).

  • Remoção da API public Any.identityHashCode() (I025d7).

  • Remoção da API toStringAsFixed em favor de usar String.format diretamente (Iaba6b).

  • Adição de Toggle a Strings.kt de fundação (I4a5b7, b/172366489).

  • O nativeClass foi movido para o módulo ui e definido como interno. Atualização dos usos de nativeClass em implementações equivalentes para usar "is MyClass" (I4f734).

  • Modifier.focus() e Modifier.focusRequester() estão obsoletos. Use Modifier.focusModifier() e Modifier.focusReference() (I75a48, b/175160751, b/175160532, b/175077829).

  • Introdução do SelectionRegistrar.notifySelectableChange para notificar atualizações do Selectable ao SelectionManager (I6ff30, b/173215242).

  • Lançamento da propriedade Outline.bounds para receber o retângulo delimitador para várias implementações de contorno (I16e74, b/175093504).

  • TestUiDispatcher está obsoleto. Em vez disso, use Dispatchers.Main (Ic171f, b/175385255).

  • ImeOptions e KeyboardOptions não são mais uma classe de dados (I3c898, b/16868431).

  • Mudanças na API VisualTransformation

    • Renomeação de OffsetMap como OffsetMapping.
    • Renomeação de OffsetMapping.identityOffsetMap como OffsetMapping.Identity.
    • PasswordTransformation não é mais uma classe de dados.
    • OffsetMapping foi movido para o próprio arquivo
    • (I0bdf3).
  • Renomeação de Position como DpOffset e remoção de getDistance() (lb2dfd).

  • Mudança de Dp.isFiinite() para um Dp.isFiite (I50e00).

Correções de bugs

  • O Recomposer agora expõe um fluxo do estado atual, permitindo o monitoramento da sua atividade e da atividade de efeitos associados (Ifb2b9).
  • O keyEvent nativo agora pode ser acessado pelo keyEvent.nativeKeyEvent (I87c57, b/173086397).
  • animate() agora é substituído por animateAsState(), que retorna um State<T> em vez de T. Isso permite um desempenho melhor, já que o escopo de invalidação pode ser restrito ao local em que o valor do State é lido (Ib179e).
  • Adição da API Semantics Role e adição de Role como um parâmetro de SemanticsModifier clicável, selecionável e alternável. Mudança de Modifier.progressSemantics para que o Slider também possa usá-lo (I216cd).
  • Nova API baseada em corrotina Animatable que garante exclusividade mútua entre as animações.
    • Nova DecayAnimationSpec para compatibilidade com animação de redução multidimensional
    • (I820f2, b/168014930).

Versão 1.0.0-alpha09

16 de dezembro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha09. A versão 1.0.0-alpha09 contém estas confirmações.

Mudanças em APIs

  • O KeyEvent.Alt de uso suspenso agora foi removido. Use KeyEvent.isAltPressed (Idd695).
  • Modifier.keyInputFilter e Modifier.previewKeyInputFilter tiveram o uso suspenso. Use Modifier.onKeyEvent e Modifier.onPreviewKeyEvent (Idbf1b, b/175156384).
  • O Modifier.focusObserver teve o uso suspenso. Use Modifier.onFocusChanged ou Modifier.onFocusEvent (I30f17, b/168511863, b/168511484).
  • Para suspender as APIs de entrada de ponteiro, o HandlePointerInputScope foi renomeado como AwaitPointerEventScope e o handlePointerInput() como awaitPointerEventScope() (Idf0a1, b/175142755).
  • A API Autofill agora é experimental e requer ativação (I0a1ec).
  • Adição de declarações de desestruturação para criar instâncias de FocuSRequester (I35d84, b/174817008).
  • accessibilityLabel foi renomeado como contentDescription. accessibilityValue foi renomeado como stateDescription (I250f2).
  • Eventos personalizados foram removidos da API de entrada do ponteiro de suspensão (Ia54d5, b/175142755).
  • Introdução de várias novas funções no SelectionRegistrar e também renomeação de onPositionChange como notifyPositionChange (Ifbaf7).
  • Mais membros de LayoutNode marcados como internos (I443c6).
  • Introdução de LayoutInfo para ser usado por ferramentas e testes (I9b190).
  • AndroidOwner agora é interno (Ibcad0, b/170296980).
  • Remoção da anotação de ExperimentalPointerInput (Ia7a24).
  • Adição do sistema de rolagem aninhado. Consulte Modifier.nestedScroll para mais detalhes (I36e15, b/162408885).
  • subcomposeInto(LayoutNode) agora é interno (Id724a).
  • A interface Applier foi modificada para simplificar a criação de árvores de baixo para cima, em vez de cima para baixo.

    O método insert() foi renomeado como insertTopDown().

    Um novo método, insertBottomUp(), foi adicionado.

    Uma Applier insere nós na árvore que está editando com insertTopDown() ou insertBottomUp(), dependendo de qual apresenta melhor desempenho.

    Algumas árvores, como LayoutNode e View, são muito mais eficientes para criação de baixo para cima do que de cima para baixo. Antes dessa mudança, uma pilha de inserções era necessária para implementar de baixo para cima. Ela precisava ser copiada para cada Applier, que precisava da construção de baixo para cima para ter bom desempenho. Com essa mudança, um Applier substitui um insertBottomUp() para criar uma árvore de baixo para cima, e insertTopDown() para criar a árvore de cima para baixo (Icbdc2).

  • Adição das propriedades dismissOnBackPress e dismissOnClickOutside às AndroidDialogProperties. Elas permitem configurar quando o lambda onDismissRequest da caixa de diálogo será invocado (If5e17).

  • Adição da API painterResource para lidar com o carregamento opaco de objetos Painter de formatos de recursos rasterizados (como PNGs) ou VectorDrawables. Os consumidores não precisam mais determinar o tipo de recurso com antecedência e podem chamar esse método para receber um objeto Painter para uso em elementos Image que podem ser compostos ou modificadores de Painter (I2c703, b/173818471).

  • Adição de Modifier.clearAndSetSemantics para limpar a semântica dos descendentes e definir novas (I277ca).

  • O ContentDrawScope foi movido para o módulo ui-graphics para ser usado com o DrawScope (Iee043, b/173832789).

  • Introdução da API de gráficos PathEffect para fornecer padrões diferentes para formas traçadas. O uso de NativePathEffect foi suspenso e substituído pela implementação real/esperada do PathEffect (I5e976, b/171072166).

  • Adição de interfaces IdlingResource ao Compose, como uma variante compatível com o Compose dos recursos de inatividade do Espresso. Elas podem ser registradas e ter o registro cancelado usando ComposeTestRule (I433f3).

  • Remoção do registro (ou do cancelamento do registro) global de ComposeIdlingResource e do registro (ou do cancelamento do registro) global dos relógios para ComposeIdlingResource (I32660).

Correções de bugs

  • Lambdas em modificadores de deslocamento agora retornam IntOffset em vez de Float (Ic9ee5, b/174137212, b/174146755).
  • Remoção de SlotTable, SlotReader e SlotWriter da API pública. Antes, eles eram marcados como InternalComposeAPI. Agora, eles são internos do módulo do Compose.

    CompositionData e CompositionGroup foram adicionados como substitutos da API de IU para extrair as informações da composição. Elas são públicas, mas não são destinadas para uso fora da API de IU, já que fornecem as informações brutas que a API de IU interpreta (I31a9c).

  • O ShaderBrush foi refatorado para criar lentamente uma instância de sombreador quando as informações de dimensionamento do ambiente de desenho estão disponíveis. Isso é útil para definir gradientes que ocupam os limites de desenho completos de um elemento que pode ser composto no momento da composição, sem precisar fazer implementações DrawModifier personalizadas.

    APIs suspensas do construtor de função de gradiente substituídas pelos métodos de fábrica em um objeto Gradient (I511fc, b/173066799).

  • Suspensão do uso de LazyColumnFor, LazyRowFor, LazyColumnForIndexed e LazyRowForIndexed. Use LazyColumn e LazyRow (I5b48c).

  • BuildCompat.isAtLeastR suspenso (Idb37e).

  • Adição da função de fábrica buildAnnotatedString para criar uma AnnotatedString. Suspensão do uso da função builder da annotatedString (Idfe0b).

  • Remoção dos métodos de extensão em Float e Double para converter valores em radianos. Agora essa é uma função particular no PathParser de implementação, que é o único lugar em que isso era usado (I25f52).

Versão 1.0.0-alpha08

2 de dezembro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estas confirmações.

Mudanças em APIs

  • A ação semântica Dismiss foi adicionada (I2b706).
  • As APIs DrawModifier foram movidas do pacote androidx.compose.ui para androidx.compose.ui.draw. Criação do arquivo DrawModifierDeprecated.kt para incluir os métodos typealiases/helper para ajudar na migração da suspensão de uso para as APIs atuais (Id6044, b/173834241).
  • Renomeação de Modifier.drawLayer para Modifier.graphicsLayer. Além disso, houve a atualização das classes relacionadas para GraphicsLayer de acordo com o feedback da API (I0bd29, b/173834241).
  • Novos métodos placeable.placeWithLayer() e placeable.placeRelativeWithLayer() foram adicionados para permitir que layouts personalizados e modificadores de layout coloquem um filho na introdução de uma camada gráfica para os desenhos deles. Com isso, podemos primeiramente otimizar os desenhos refeitos, para que, quando precisarmos mover um filho, não seja necessário redesenhar o conteúdo. Em segundo lugar, podemos aplicar transformações de desenho para um filho (Ibd8f6, b/170296989, b/171493718, b/173030831).
  • <T> foi removido da declaração de SubcomposeLayout. Você pode usá-lo sem especificar um tipo agora (Ib60c8).
  • Adição de APIs Modifier.scale/rotate como conveniências para drawLayer.
    • Modifier.drawOpacity foi renomeado como Modifier.alpha.
    • Modifier.drawShadow foi renomeado como Modifier.shadow (I264ca, b/173208140).
  • Tornou os campos de posição e de tempo de atividade do PointerInputData não anuláveis (Id468a).
  • Agora, o MaterialTheme define as cores corretas para as alças e para o segundo plano da seleção. Apps que não são do Material podem usar manualmente AmbientTextSelectionColors para personalizar as cores usadas para seleção (I1e6f4, b/139320372, b/139320907).
  • Adição de WindowManager.isWindowFocused para verificar se a janela do host está em foco, e um WindowFocusObserver que fornece um callback de onWindowFocusChanged (I53b2a, b/170932874).
  • Atualização da API TransformOrigin para que a sintaxe de desestruturação retorne pivotFractionX e pivotFractionY como component1 e component2 (If43c4, b/173586560).
  • Adição de verificação de lint para posicionamento e nomeação do parâmetro lambda que pode ser composto, para verificar a consistência com as diretrizes do Compose. Também ocorreu a migração de algumas APIs usando children como o nome do lambda final para content, de acordo com a verificação e as orientações do lint (Iec48e).
  • Adição da API para verificar se as teclas modificadoras Alt, Ctrl, Meta ou Shift foram pressionadas quando um evento de tecla foi enviado (I50ed9).
  • Adição de uma nova sobrecarga de Modifier.drawLayer(). É necessário um bloco lambda em um novo GraphicsLayerScope, onde você define os parâmetros de camada de uma forma que permite pular a recomposição e o novo layout quando a mudança de estado acontece. O DrawLayerModifier agora é interno como forma de preparo para a migração da lógica para o método placeable.placeWithLayer() do LayoutModifier (I15e9f, b/173030831).
  • Ambientes suspensos nomeados com Ambient como sufixo e substituídos por novas propriedades prefixadas com Ambient, seguindo outras diretrizes da API Compose e Ambients (I33440).
  • androidx.compose.ui.text.Typeface foi movido para androidx.compose.ui.text.font.Typeface (Ic2b81).
  • Renomeação do argumento semântico, mergeAllDescendants como mergeDescendants (Ib6250).
  • Nova API de entrada do ponteiro de suspensão para detector de gesto de arrastar, incluindo o bloqueio de orientação (Icef25).
  • Renomeação de VectorAsset como ImageVector. VectorAsset movido e renomeado como Builder para ser uma classe interna de ImageVector, de acordo com as diretrizes da API. Adição de typealias de VectorAssetBuilder para vincular ImageVector.Builder para compatibilidade (Icfdc8).
  • ImageAsset e métodos relacionados foram renomeados como ImageBitmap (Ia2d99).
  • Adição do parâmetro zIndex ao place() do PlacementScope. Agora, Modifier.zIndex() funciona como um LayoutModifier, e qualquer layout personalizado pode definir zIndexes para seus filhos diretamente no bloco de canais (I711f7, b/171493718).
  • Propriedades semânticas de base movidas para iu (I6f05c).
  • Suspensão do uso de place(Offset) e placeRelative(Offset). Use sobrecargas com deslocamentos int (I4c5e7).
  • As APIs anteriormente suspensas foram removidas: Modifier.onPositioned foi removida, então use Modifier.onGloballyPositioned. Modifier.onDraw foi removida, então use Modifier.onDrawBehind. Modifier.plus foi removida, então use Modifier.then. Color.Unset foi removida, então use Color.Unspecified. A classe PxBounds foi removida, então use a Rect (Ie9d02, b/172562222).
  • A interface Alignment foi atualizada e transformada em funcional (I46a07, b/172311734).
  • O detector de gestos para toque, dois toques, tocar e manter pressionado e indicação de pressionamento foi adicionado usando a nova entrada de ponteiro de suspensão. Alguns utilitários também foram adicionados, o que facilita a gravação de detectores de gesto próprios pelos desenvolvedores (I00807).
  • id foi renomeado como layoutId para LayoutIdParentData. O Measurable.id foi renomeado como Measurable.layoutId (Iadbcb, b/172449643).
  • Novo detector de gestos multitoque, incluindo auxiliares para detectar rotação, zoom e movimento (Ic459d).
  • Introdução às APIs SweepGradientShader e SweepGradientBrush (Ia22c1).
  • O controle de tempo em testes (TestAnimationClock e os usos dele) agora é experimental (I6ef86, b/171378521).
  • Adição de APIs de rolagem baseadas em corrotinas:

    Adição de LazyListState.snapToItem e LazyListState.smoothScrollBy, assim como APIs de nível inferior para controle de rolagem. Essas APIs fornecem uma interface de suspensão para controlar a rolagem, que aguarda até que a rolagem seja concluída antes de retornar (Ie5642).

  • Modifier.focusable precisa ser adicionado na base. Use-o para adicionar comportamentos focalizáveis a um componente, com semântica e acessibilidade corretas (I41eb9, b/152525426, b/162865824).

  • Fornecer implementações padrão de métodos e propriedades na AnimationClockTestRule, que podem ser delegadas ao clock dela (I7ea3d e b/173399709).

  • AndroidComposeTestRule agora pode aceitar telas de início de atividades personalizadas (Ib8288, b/153623653, b/154135019).

  • O TextLayoutResult.getLineVisibleEnd teve o uso suspenso. Como substituto, TextLayoutResult.getLineEnd agora tem um novo parâmetro visibleEnd (I73282).

  • API TextFieldValue atualizada.

    • TextFieldValue.composition agora é somente leitura.
    • Remoção da exceção gerada para intervalo de seleção inválido (I4a675, b/172239032).
  • Compatibilidade com TtsAnnotation para mecanismo de conversão de texto em voz (I54cc6).

  • Novas APIs para executar animações em corrotinas (Ied662).

Correções de bugs

  • O parâmetro de alinhamento do Box foi renomeado como contentAlignment (I2c957).
  • Os modificadores offsetPx foram renomeados como offset. Agora, eles usam parâmetros lambda em vez de State (Ic3021, b/173594846).
  • Adição do parâmetro resetInput para TextInputService#onStateUpdated (I3e8f5, b/172239032, b/171860947).
  • Adição de verificação de lint para parâmetros Modifier em funções que podem ser compostas. Essa verificação de lint confere a nomenclatura, o tipo de retorno, o valor padrão e a ordem do parâmetro para garantir consistência com as diretrizes do Compose (If493b).
  • Opção temporariamente adicionada para permitir que o TestAnimationClock seja orientado pelo MonotonicFrameClock (I1403b, b/173402197).
  • Adição do wrapper Android Typeface. Você pode carregar um Android Typeface usando a função typeface, ou seja, typeface(Typeface.DEFAULT). Além disso, typefaceFromFontFamily() foi renomeado como typeface() (I52ab7).
  • Adição de verificação de lint para conferir se as funções de fábrica do Modifier estão definidas como extensões nele, para que possam ser encadeadas juntas (I07981).
  • Remoção do antigo módulo ui-test e dos stubs dele (I3a7cb).
  • O Recomposer não aceita mais um EmbeddingContext. As dependências de programação necessárias são adquiridas no effectCoroutineContext. O FrameManager está suspenso. As integrações de plataforma precisam inicializar o próprio gerenciamento global de snapshots (I02369).
  • Transmissão de informações de estilo para o nó de acessibilidade (If5e8d).
  • TextUnit.Inherit renomeado como TextUnit.Unspecified para consistência com outras unidades (Ifce19).

Compose UI: versão 1.0.0-alpha07

11 de novembro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estas confirmações.

Mudanças em APIs

  • Introdução da classe in-line ScaleFactor para representar fatores de escala para os eixos horizontal e vertical independentes uns dos outros para compatibilidade com casos de uso de escalonamento não uniforme.
    • Adição do método computeScaleFactor ao ContentScale.
    • Adição de ContentScale.FillBounds para realizar o escalonamento não uniforme e esticar os limites de src para ocupar completamente o destino.
    • Adição de métodos de operador para calcular parâmetros ScaleFactor com parâmetros Size
    • (Ic96a6, b/172291582).
  • Adição das fábricas BiasAlignment e BiasAbsoluteAlignment para criar alinhamentos (Iac836, b/169406772).
  • Permissão para um desenvolvedor limpar o foco à força (I90372).
  • Correção de um bug em que a elevação não era desenhada para visualizações dentro do Compose (If7782).
  • Criação da API onDrawBehind dentro do ContentDrawScope para corresponder à convenção de nomenclatura de Modifier.drawBehind (I4fc3a, b/171955269).
  • Adição de compatibilidade com a distância da câmera para complementar rotaçãoX/rotaçãoY de transformações 3D nas APIs de camada (I40213, b/171492100).
  • Adição de SelectContainer sem o callback (Ibfadb).
  • A anotação ExperimentalSubcomposeLayoutApi foi removida. SubcomposeLayout agora pode ser usado sem adicionar @OptIn (I708ad).
  • FirstBaseline e LastBaseline foram movidos para o pacote androidx.compose.ui.layout (Ied2e7).
  • Remoção da opacidade do modificador drawShadow() por ele ser confuso (I82c62, b/171624638).
  • MeasureResult foi removido do MeasureScope (Ibf96d, b/171184002).
  • Vários símbolos relacionados ao layout foram movidos de androidx.compose.ui para androidx.compose.layout.ui (I0fa98, b/170475424).
  • Remoção de FocusState2 obsoleto (I686cb, b/168686446).
  • O ZIndexModifier agora é interno (I1808b, b/171493718).
  • Atualização do tipo de retorno do método de interpolação linear nos parâmetros Size para retornar um Size não nulo a fim de evitar caixas de seleção desnecessárias (Ib0044).
  • Adição de TestMonotonicFrameClock para testar código que depende do MonotonicFrameClock do Compose para aguardar eventos de frame de composição usando runBlockingTest do kotlinx-coroutines-test (I4402f).
  • Remoção de GestureScope.localToGlobal (I15299, b/171462785).
  • Adição do localizador de onAllNodesWithSubstring (I81dd7, b/171462889).
  • Suspensão do uso do módulo androidx.ui.test. Migre para androidx.compose.ui.test e androidx.compose.ui.test.junit4 (I452e8).

Correções de bugs

  • captureToBitmap foi movido para captureToImage (I86385).
  • O uso de foundation.Text foi suspenso, e ele foi substituído por material.Text. Para uma API de texto básica e discreta que não consome valores de um tema, consulte androidx.compose.foundation.BasicText (If64cb).
  • Atualização de TextFields para aceitar KeyboardOptions (Ida7f3).
  • Renomeação de KeyboardOptions como ImeOptions (I82f36).
  • KeyboardType e ImeAction foram movidos para KeyOptions (I910ce).
  • provideDefault foi adicionado como alternativa para fornecer ambientes e pode ser usado para especificar valores de ambiente que só serão definidos quando não houver um valor de ambiente já fornecido (Id6635, b/171024925).
  • Suspensão de uso de BaseTextField. Use BasicTextField (I896eb).
  • Introdução do módulo ui-test-junit4 (Ib91f8).
  • Renomeação de relativePaddingFrom como paddingFrom. O modificador paddingFromBaseline foi adicionado como conveniência para especificar distâncias de limites de layout para linhas de base de texto (I0440a, b/170633813).
  • LaunchedTask foi renomeado como LaunchedEffect para fins de consistência com as APIs SideEffect e DisposableEffect. Para incentivar as práticas recomendadas, o LaunchedEffect sem parâmetros de assunto não será permitido (Ifd3d4).
  • Introdução de recursos que podem ser compostos que são recompostos quando a configuração é atualizada (I6387c, b/167352819).
  • O Recomposer agora exige um CoroutineContext na construção (Ic4610).
  • Soma dos valores zIndex quando vários Modifier.zIndex() são aplicados. Antes, o primeiro estava ganhando (Ic514c, b/170623936).
  • Mudanças na implementação interna de SlotTable que não afetarão a API pública (If9828).
  • Adição da opção IME (editor de método de entrada, na sigla em inglês) de correção automática do teclado (I57b8d).
  • androidx.ui.test movido para androidx.compose.ui.test (I9ffdb).
  • Remoção de KeyboardOptions.toImeOptions da API pública (Ic2e45).

Contribuição externa

  • Desativação da publicação de artefato interno androidx.compose.ui:ui-text-android (Ib93fa).

Versão 1.0.0-alpha06

28 de outubro de 2020

androidx.compose.ui:ui-*:1.0.0-alpha06 é lançado. A versão 1.0.0-alpha06 contém estas confirmações.

Mudanças em APIs

  • O Recomposer agora é um ComposeReference e um pai de composição válido. Agora, o Recomposer explícito é obrigatório em menos lugares (I4036f).
  • Substituição do uso de VectorPainter pelo rememberVectorPainter para indicar melhor que a API que pode ser composta usa internamente o "remember" de modo a manter dados entre composições (Ifda43).
  • Atualização da API Modifier.drawWithCache para expor ContentDrawScope como um escopo de receptor em vez de DrawScope para fornecer às implementações a capacidade de reordenar os comandos de desenho. Isso é útil para casos de uso de mistura/tonalização, em que os pixels do conteúdo precisam ser renderizados primeiro para que o algoritmo correspondente do modo de mistura seja aplicado corretamente (Ie7ec8).
  • SimpleContainer movido para PopupTestUtils.kt (I78c57).
  • ConsumedData não é mais uma classe de dados. Consulte https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219 para mais detalhes (I1737f).
  • Correção de Handle Position Rtl (I6e1e0).
  • Refatoração de DrawScope e ContentDrawScope para que sejam interfaces em vez de classes abstratas.
    • Criação da implementação CanvasDrawScope do DrawScope.
    • Implementações refatoradas do DrawScope para usar o CanvasScope.
    • Criação do DrawContext para unir dependências para o DrawScope.
    • Remoção de métodos obsoletos no DrawScope (I56f5e).
  • Alteração interruptiva: remoção do valor de retorno de PointerInputFilter.onPointerEvent(...), já que o único valor que deveria poder ser mudado nos eventos de ponteiro é o dos dados de consumo. Em vez de retornar dados de PointerInputFilter.onPointerEvent(...), agora é possível mudar os dados de consumo dos PointerEvents transmitidos (I6acd0).
  • MeasureScope e IntrinsicMeasureScope foram transformados em interfaces (I1a087, b/170461665).
  • Ocultação da função de mesclagem para AlignmentLine (I9da1a, b/170612900, b/170611568).
  • Adição da capacidade de especificar informações do inspetor no modificador composto (Idee08, b/163494569).
  • Adição da opção SelectAll no menu de seleção (Ief02b).
  • Atualização de DrawTransform.rotate para usar um parâmetro de rotação padrão do centro para corresponder à documentação.
    • Atualização do DrawScope.rotateRad para consumir um Offset para que o ponto de rotação corresponda a outros métodos de transformação.
    • Suspensão de uso da sobrecarga DrawScope.rotateRad que consumia pontos flutuantes para as coordenadas x e y da rotação
    • (Iffcbb, b/170434992).

Correções de bugs

  • A verificação de lint da API para MissingGetterMatchingBuilder está ativada para androidx (I4bbea, b/138602561).
  • Adição de teste (I6b8ae).
  • Ativação de transições em ComposeTestRule. Remoção da opção para ativar o cursor piscante na ComposeTestRule (If0de3).
  • Adição da opção IME (editor de método de entrada, na sigla em inglês) KeyboardCapitalization (I8ac38).
  • Adição da opção de teclado de linha única para CoreTextField (I72e6d).
  • SimpleContainer foi movido para PopupTestUtils.kt (I65c3e).
  • Renomeação da API Radius como CornerRadius para expressar melhor a forma de uso dela no Compose. Atualização da documentação para indicar que raios negativos dos cantos são fixados a zero (I130c7, b/168762961).
  • Melhoria da interoperabilidade do Android ao continuar enviando MotionEvents para as visualizações filhas do Android que retornam um valor falso para onTouchEvent em todas as ações, exceto ACTION_DOWN (I94c5a e b/170320973).
  • Box agora é uma função in-line (Ibce0c, b/155056091).

Contribuição externa

  • Compatibilidade com diferentes localidades para AnnotatedString.capitalize e AnnotatedString.decapitalize (I4aa7f).

Versão 1.0.0-alpha05

14 de outubro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Mudanças em APIs

  • Adição de uma DSL para especificar informações do inspetor (Ic9a22).
  • LongPress movido para Text (Iff2bc).
  • Suspensão do modificador de entrada Modifier.pointerInput experimental (Ia77d2).
  • Adição de ações de acessibilidade de copiar/colar/cortar (I6db4f).
  • Remoção do construtor público para AndroidOwner (Iacaef).
  • Pop-ups e caixas de diálogo agora herdam FLAG_SECURE da janela mãe. Adição de opção para configurar isso explicitamente (I64966, b/143778148, b/143778149)
  • Os dados de consumo agora são mutáveis. Além disso, chamadas para funções de extensão que usam consumo agora não retornam mais um novo PointerInputChange, mas mudam o PointerInputChange fornecido.

    Essa é a primeira etapa de um processo de duas etapas para tornar os dados do PointerEvent mutáveis, de forma que outros dados de ponteiro não possam ser editados pelo código do usuário. A segunda etapa será remover o tipo de retorno List<PointerInputChange> de PointerInputFilter.onPointerEvent(...) (Id067e).

  • Desativação de Selection em Text, e uma Demo (Ie7e97).

  • onGloballyPosition agora é uma função in-line (I15830).

  • OnPositionedModifier foi renomeado como OnGloballyPositionedModifier e onPositioned() foi renomeado como onGloballyPositioned(). (I587e8, b/169083903).

  • A propriedade hasPendingMeasureOrLayout foi adicionada ao Owner, informando se ele tem algum trabalho de layout pendente (I3d9f8, b/169038599).

  • Adição de API para limpar programaticamente o foco (Ie1dc2, b/161487952).

  • Remoção de PointerInputFilter.onPointerInput(...). PointerInputFilter.onPointerEvent(...) precisa ser usado no lugar dele (I6f04a)

  • Mudanças no Size

    • Remoção de Size.getFlipped
    • Remoção de Size.rem
    • Remoção de Size.truncDiv (Ief44d, b/169790720).
  • Como parte da padronização de valores de sentinela para classes inline, renomeação de Color.Unset como Color.Unspecified para consistência com outras classes inline (I97611, b/169797763).

  • Introdução de TextOverflow.None. Quando overflow for "None", o Text não será mais processado e informará o tamanho real para o LayoutNode (I175c9, b/158830170).

  • O parâmetro de escopo em AnnotatedString.Builder.addStringAnnotation foi renomeado para marcar a consistência da API (I7c8cb)

Correções de bugs

  • O desempenho de rolagem de LazyColumn/Row foi melhorado com menos trabalho na subcomposição em cada rolagem. O novo método hasInvalidations() foi adicionado para a classe Composition. O método hasPendingChanges() do Recomposer foi renomeado como hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
  • Atualização dos parâmetros Size.Unspecified para Float.NaN, em vez de Float.POSITIVE_INFINITY. Atualização das implementações do Painter para verificar o Size.Unspecified, assim como Sizes não finitos (I95a7e).
  • Agora, a ordem das chamadas place() em Layouts personalizados define a ordem de desenho para os filhos (Ibc9f6).
  • Compatibilidade com AnnotatedString para conversão do SpannableString para acessibilidade. (Ief907).
  • Adição de stubs para classes Android que estão em plataformas mais antigas para evitar o uso de reflexão quando possível (Ia1790).
  • Correção de bug: se a exibição do teclado do software causava a tradução do app, as coordenadas da entrada do ponteiro ficavam incorretas (Ic4cec, b/163077821)

Versão 1.0.0-alpha04

1º de outubro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Mudanças em APIs

  • Adição de OwnerScope para permitir a coleta de escopos de observação de desenho e layout quando eles deixam de ser válidos (Ic4cf8).
  • Adição de OnRemeasuredModifier e onSizeChanged() para receber um callback quando o layout do conteúdo é medido novamente e quando o tamanho muda, respectivamente (I657cf, b/154108792).
  • Adição de ação semântica de clique longo (I6281b, b/156468846).
  • Agora, o FocusManager é privado (I7872f).
  • Atualização da implementação para criar uma implementação dedicada do DrawCacheModifier em vez de adicionar propriedades opcionais no DrawModifier.

    Atualização da documentação para vários métodos (Ibd166).

  • TextRange agora é uma in-line para evitar a criação de objetos (Id034b).

  • PlacementScope#parentWidth e PlacementScope#parentLayoutDirection não podem mais ser lidos do bloco de posição de um layout personalizado (Icc1ae, b/168295623).

  • Adição de AccessibilityScrollState às propriedades semânticas (Ifeda9).

  • Introdução do Modifier.drawWithCache para oferecer compatibilidade com a criação de um objeto de desenho que recria condicionalmente dependências que dependem de informações de tamanho/estado (I376dc).

  • O ParagraphConstraints foi removido. Agora, a largura é transmitida diretamente para o Paragraph (Ica712).

Correções de bugs

  • Atualização de várias APIs Graphics
    • As APIs de transformação de escala e rotação foram atualizadas para consumir um único parâmetro Offset para representar a coordenada dinâmica em vez de parâmetros de flutuação separados para as coordenadas x/y em DrawScope e DrawTransform.
    • Remoção dos métodos Rect.expandToInclude e Rect.join.
    • Documentação do Radius atualizada para informar oval, além de elíptico.
    • Adição da documentação para indicar que o construtor público da classe Radius in-line não deve ser chamado diretamente, mas os objetos Radius precisam ser instanciados pelos construtores de função deles.
    • Remoção das APIs RoundRect para consultar topRight, bottomRight, bottomCenter etc.
    • Substituição do Rect.shift descontinuado por Rect.translate.
    • Remoção das APIs RoundRect.grow e Rect.shrink.
    • Renomeação de RoundRect.outerRect para Rect.boundingRect.
    • Remoção dos métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect e Rect.isStadium.
    • Renomeação de RoundRect.longestSide para RoundRect.maxDimension.
    • Renomeação de RoundRect.shortestSide para RoundRect.minDimension.
    • Mudança de RoundRect.center para que seja uma propriedade em vez de uma função.
    • Atualização do construtor RoundRect para consumir propriedades do Radius em vez de parâmetros individuais para valores de raio x/y.
    • Remoção das APIs Size que pressupunham ser um retângulo com origem em 0,0.
    • Adição de uma API de destruição ao Radius.
    • Migração de várias funções de extensão RoundRect para serem propriedades
    • (I8f5c7, b/168762961).
  • Descontinuação do uso de foundation.Box. Use foundation.layout.Box (Ie5950, b/167680279).
  • Stack foi renomeado como Box. O uso do Box anterior será descontinuado e foi substituído pelo novo Box em compose.foundation.layout. O comportamento do novo Box quando tem vários filhos é empilhá-los um em cima do outro. Isso é diferente do Box anterior, que se comportava de maneira semelhante a Column (I94893, b/167680279).
  • Os parâmetros de decoração do Box foram descontinuados. Se você quiser ter decorações/padding na sua caixa, use Modifiers, como Modifier.background, Modifier.border, Modifier.padding (Ibae92, b/167680279).
  • Atualização de várias APIs Graphics
    • Atualização das APIs DrawScope com métodos de transformação com escopo para indicar que a transformação só é aplicada dentro do callback e removida depois de ele ser invocado.
    • Atualização da documentação do clipPath para se referir ao Path em vez do retângulo arredondado.
    • Correção do espaçamento na documentação para o parâmetro correto em clipPath.
    • Renomeação de DrawScope.drawCanvas como drawIntoCanvas e remoção do parâmetro de tamanho.
    • Renomeação de parâmetros dx/dy no método de encarte como horizontal e vertical.
    • Adição de sobrecarga do encarte, que fornece o mesmo valor de encarte a todos os quatro limites.
    • Remoção da documentação sobre o método do encarte indicando que o encarte seria aplicado a todos os quatro lados.
    • Atualização da documentação da classe Rect.
    • Atualização de comentários sobre os parâmetros Rect para corresponder ao estilo kdoc.
    • Remoção de Rect.join e Rect.expandToInclude.
    • Criação de sobrecarga para Rect.translate(offset) e para o Rect.shift descontinuado
    • (If086a, b/167737376).
  • Anotação de rootAnimationClockFactory, transitionEnabled, blinkingCursorEnabled e textInputServiceFactory com @VisibleForTesting, tornando-as APIs internas e ocultando o kdoc delas (I554eb, b/168308412).
  • Remoção de SelectContainer do topo para desativar a seleção padrão e evitar comportamentos inesperados. É possível usar especificamente um SelectionContainer para agrupar o conteúdo que precisa ser selecionável (I8dfe0, b/158459594).

Versão 1.0.0-alpha03

16 de setembro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Mudanças em APIs

  • Remoção das ações de semântica de rolagem para frente/para trás. Adição de etapas em AccessibilityRangeInfo (Ia47b0).
  • Remoção de onInvalidate() do Owner: OwnedLayer processa a invalidação (Ica72b, b/162061312).
  • Remoção dos métodos de operador na API Size que consomem parâmetros Offset. O resultado dessas operações não é claro, e o tipo de resultado é inesperado para elas. Ex.: "size - offset" retorna um deslocamento ou um resultado de tamanho com a diferença?

    Também foram removidos os métodos obsoletos na classe Size (Iec902, b/166514214).

Correções de bugs

  • Correção de itens de LazyColumn que às vezes são desenhados incorretamente, o que também causava falhas em algumas condições (Ibcf17, b/163066980, b/165921895).
  • DpConstraints e as APIs que o usavam estão obsoletos (I90cdb, b/167389835).
  • createAndroidComposeRule e AndroidInputDispatcher foram movidos de androidx.ui.test.android para androidx.ui.test (Idef08, b/164060572).
  • Os usos da gravidade foram renomeados de forma consistente para align ou alignment nas APIs de layout (I2421a, b/164077038).
  • Adição de onNode e de outros métodos globais na ComposeTestRule, porque os atuais ficarão obsoletos (Ieae36).

Versão 1.0.0-alpha02

2 de setembro de 2020

Lançamento de androidx.compose.ui:ui-*:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estas confirmações.

Mudanças em APIs

  • Remoção de callback para notificar o proprietário quando os limites do layoutnode mudam (If654e, b/166106882).
  • Adição de suporte a parâmetros de tipo de preenchimento em caminhos de gráficos vetoriais para compatibilidade com cortes de formas, de acordo com as regras de preenchimento de caminho evenOdd ou NonZero (I43dd2).
  • O tempo de atividade e a velocidade agora são classes in-line (I48f4a).
  • Duration agora é uma classe in-line (I565eb).
  • Adição de callback para notificar o proprietário quando os limites do layoutnode mudam Ic40b3
  • Correção do problema em que o construtor da função Rect com deslocamento e raio cria o retângulo na ordem esquerda, direita, superior, inferior em vez de esquerda, superior, direita e inferior.

    Remoção de métodos complementares obsoletos no Rect em detrimento de construtores de funções.

    Adição de testes para verificar métodos em Rect.kt (I08460, b/165822356).

Correções de bugs

  • Adição de MutableRect, um retângulo que pode ser modificado (I71bd2, b/160140398).
  • A Matrix4 foi substituída por Matrix. Todas as outras partes do pacote vectormath foram removidas Ibd665, b/160140398
  • A convenção de chamada para funções que podem ser compostas foi modificada. Essa é uma alteração interruptiva binária. Todas as bibliotecas precisam ser recompiladas para funcionar com essa versão do plug-in compilador do Compose.

    Essa mudança não cria uma alteração interruptiva no nível da origem, uma vez que as únicas APIs que foram modificadas são APIs do compilador que têm uma permissão explícita (I7afd2, b/158123185).

  • Correção da falha que poderia ocorrer durante o envio para um PointerInputFilter e fazia com que o PointerInputFilter fosse removido de forma síncrona I58f25

Versão 1.0.0-alpha01

26 de agosto de 2020

androidx.compose.ui:ui-*:1.0.0-alpha01 é lançado. A versão 1.0.0-alpha01 contém estas confirmações.

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

Lançamento de androidx.compose.ui:ui-*:0.1.0-dev17. A versão 0.1.0-dev17 contém estas confirmações.

Mudanças em APIs

  • Suspensão do uso de emitView. Use AndroidView, se possível, para emitir Views dentro do Compose. A composição direta de Views e ViewGroups não estará disponível no futuro, a menos que elas sejam folhas da árvore de composição. Nesse caso, a composição direta será possível usando o AndroidView (I29b1e, b/163871221).
  • Suspensão de FocusState2 e substituição por FocusState (Ia8b79, b/160822876, b/160923332).
  • Remoção das sobrecargas obsoletas de AndroidView (I946b9, b/163802393).
  • Agora, as emissões personalizadas podem declarar que um ou mais setters podem ser ignorados e recompostos independentemente da emissão (Ibbd13).
  • Mudança das classes Vector para não serem mais classes de dados, já que a mesma instância de objeto é usada na composição.

    Adição da sinalização mutableStateOf em VectorPainter para redesenhar condicionalmente se o conteúdo do vetor for mudado.

    Refatoração da instância VectorComponent para fazer parte do VectorPainter enquanto é reutilizada em composições.

    Atualização de GroupComponent e PathComponent para que os campos de nome sejam mutáveis (Ieae45, b/151378808).

  • Removidos onChildPositioned e OnChildPositionedModifier. Os desenvolvedores precisam usar onPositioned e OnPositionedModifier no layout filho (I4522e, b/162109766).

  • Offset agora é uma classe inline (Iaec70).

  • Adição de um parâmetro modificador a SelectionContainer (I4aada, b/161487952).

  • Remoção do FocusModifier obsoleto (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940).

  • Adição do lambda mergePolicy a SemanticsPropertyKey. É possível usá-la para definir uma política personalizada para a mesclagem de semântica mergeAllDescendants. A política padrão será usar o valor pai se já estiver presente. Caso contrário, o valor filho (Iaf6c4, b/161979921).

  • Constraints agora é uma classe in-line (I88736).

  • Adição de FocusManager, que move a lógica de foco comum de AndroidComposeView (I528ef, b/161487952, b/162206799).

  • Atualização de nomes de PointerEventPass para a versão Alfa (Ifda6f).

  • IntOffset agora é uma classe inline (Iac0bf).

  • IntSize agora é uma classe inline (I2bf42).

  • PlacementScope.placeAbsolute() foi renomeado como PlacementScope.place(), e o PlacementScope.place() anterior foi renomeado como PlacementScope.placeRelative(). Por essa razão, o método PlacementScope.place() não espelhará de forma automática a posição em contextos da direita para a esquerda. Se você quiser o espelhamento, use PlacementScope.placeRelative() (I873ac, b/162916675).

  • AlertDialog agora usa FlowRow para botões (I00ec1, b/161809319, b/143682374).

  • Transformação de alguns utilitários de teste em não públicos porque não estavam onde precisavam estar. Isso será disponibilizado ao público no futuro (I32ab1).

  • Organização refatorada do código de entrada do ponteiro (Ie3f45).

  • Suspensão do uso de PxBounds em favor de Rect. Atualização de todos os usos de PxBounds com rect e adição de descontinuação/substituição por anotações para auxiliar na migração (I37038, b/162627058).

  • Remoção de KeyEvent2. Use KeyEvent (Ied2d0, b/162097587).

  • KeyEvent tem uma propriedade Unicode que pode ser usada para receber o caractere Unicode gerado pela combinação de estado especificada de tecla e tecla meta (If3afc).

  • Transformação do evento personalizado DelayUp e das classes relacionadas em uma API de ativação, já que é muito provável que sejam mudados (I56d6f).

  • Remoção de dois PointerEventPasses que não são mais necessários (I3dd9d).

  • Adição de cor, sombra e TextDecoration de parâmetro a Paragraph.paint. Essa função é útil para evitar a recriação desnecessária de parágrafos (I81689).

Correções de bugs

  • Remoção dos callbacks onFocusChanged do TextField. Use Modifier.focusObserver (I51089, b/161297615).
  • Suspensão do uso de Modifier.drawBorder. Use Modifier.border. A classe de dados Border foi substituída por BorderDraw (I4257d, b/158160576).
  • As chamadas FrameManager obsoletas foram removidas.

    As APIs de composição interna foram mudadas para reduzir a quantidade de sobrecarga para rastrear objetos de estado, como mutableStateof() (I80ba6).

  • Remoção de VerticalScroller e HorizontalScroller. Use ScrollableColumn/Row. Remoção de Modifier.drawBackground. Agora use Modifier.background (I73b0d, b/163019183).

  • Correção da falha que ocorria quando algo que salvava o estado era usado dentro do loop. Agora, é permitido ter a mesma chave em savedInstanceState(), a API UiSavedStateRegistry está ajustada para esse novo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).

  • O uso do composto state { ... } foi substituído pelas chamadas explícitas para remember { mutableStateOf(...) } para maior clareza. Isso reduz a plataforma geral da API e o número de conceitos de gerenciamento de estado e corresponde ao padrão by mutableStateOf() para delegação de propriedade de classe (Ia5727),

  • Renomeação de RRect como RoundRect para ajustar melhor os padrões de nomenclatura de composto Criação de construtores de função semelhantes para RRect e construtores de função RRect obsoletos (I5d325).

Versão 0.1.0-dev16

5 de agosto de 2020

androidx.compose.ui:ui-*:0.1.0-dev16 é lançado. A versão 0.1.0-dev16 contém estas confirmações.

Mudanças em APIs

  • Suspensão do uso de OnChildPositioned. Use OnPositioned no filho (I87f95, b/162109766).
  • Suspensão do uso de setViewContent. Agora use setContent (I7e497, b/160335130).
  • Adição da API AndroidViewBinding para inflar e compor recursos de layout com base em ViewBinding (I081c6).
  • KeyEvent2 foi substituído por KeyEvent (I2d770, b/162097585).
  • Adição de compatibilidade com a tecla de hardware Alt (I9036b).
  • Suspensão do uso de FocusManager. Use Modifier.focus(), Modifier.focusObserver() e Modifier.focusRequester() (I74ae4, b/162211322).
  • loadVectorResource é compatível com atributos trimPath (I808fe).
  • A caixa de diálogo foi movida para a IU (I47fa6).
  • Remoção de dois PointerEventPasses que não são mais necessários (I33ca7).
  • Implementação de PointerInteropModifier, que permite receber MotionEvents e interagir com o Compose como se você estivesse implementando uma visualização do Android (Ieb08c).
  • Remoção do modificador de tag obsoleto. Use layoutId (Idaa05, b/162023919).
  • Atualização das APIs para compatibilidade da direita para a esquerda. LayoutDirectionAmbient foi adicionado e pode ser usado para ler e mudar a direção do layout. Modifier.rtl e Modifier.ltr foram removidos (I080b3).
  • Compatibilidade com o corte de caminho em gráficos vetoriais (Ie16c9, b/158188351).
  • Adição de Modifier.layout(), que permite criar um modificador de layout personalizado conveniente (I73b69, b/161355194).
  • Adição de uma nova API AndroidView e suspensão do uso das já existentes (I5bcfd).
  • Suspensão do uso de Modifier.plus. Agora use Modifier.then. "Then" tem um sinal mais forte de ordem, mas também proíbe o tipo Modifier.padding().background() + anotherModifier, que interrompe a cadeia e é mais difícil de ler (Iedd58, b/161529964).
  • Adição de subclasses de visualização [Abstract]ComposeView para hospedar conteúdo do Compose em uma hierarquia de visualizações (I46357).
  • Row e Column agora executam funções in-line reduzindo significativamente a sobrecarga de uso (I75c10).
  • SubcomposeLayout foi adicionado. Trata-se de um primitivo de baixo nível que permite compor os filhos durante a medição se quisermos usar posteriormente alguns valores disponíveis, durante a medição para a composição da subárvore. Por exemplo, WithConstraints não é implementado usando SubcomposeLayout (I25cc8).
  • Adição de SemanticsNode.positionInRoot para receber a posição de um SemanticNodes em relação à raiz da hierarquia do Compose (Icdf26, b/161336532).
  • Passagem dos MotionEvents do Android para o Compose e de volta para o Android (I14be8, b/158034713).
  • Remoção de dropdownPopup (I00430).
  • Correção da posição do pop-up em telas cortadas (Idd7dd).
  • Adição da ação de acessibilidade para receber o TextLayoutResult (I9d6e6).
  • Adição de RemeasurementModifier, que permite medir novamente o layout de maneira síncrona. Em geral, você não precisa dele, já que a nova medida de layout é feita automaticamente, mas o usamos em LazyColumnItems durante a rolagem (I5f331, b/160791058).
  • Remoção de getLineEllipsisOffset/getLineEllipsisCount. Use getLineVisibleEnd/getLineEnd/isLineEllipsized (I85aa2).
  • Adição de Marks/Annotations para seguir práticas recomendadas (I66b20).
  • Exposição de mais APIs de linha em TextLayoutResult (I79bd2).
  • Os conversores de vetor integrados para converter unidades integradas agora podem ser acessados por meio de Foo.VectorConverter. Por exemplo: Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter etc. (I3e273).

Correções de bugs

  • Resolução de variados problemas de API (I077bc).
    1. Remoção da interface OffsetBase não utilizada.
    2. Alinhamento das classes Offset e IntOffset para que tenham uma superfície de API consistente.
    3. Renomeação de IntOffset.Origin como IntOffset.Zero para ser consistente com a API Offset.
    4. O método nativeCanvas foi movido da interface Canvas para que os consumidores possam criar as próprias instâncias.
    5. Criação da classe stub EmptyCanvas para refatorar DrawScope para ser um parâmetro não nulo em vez de lainit e garantir a não nulidade do campo.
    6. Renomeação das enumerações ClipOp para seguir o padrão Pascal Case.
    7. Renomeação das enumerações FilterQuality para seguir o padrão Pascal Case.
    8. Renomeação das enumerações StrokeJoin para seguir o padrão Pascal Case.
    9. Renomeação das enumerações PointMode para seguir o padrão Pascal Case.
    10. Renomeação das enumerações PaintingStyle para seguir o padrão Pascal Case.
    11. Renomeação das enumerações PathFillType para seguir o padrão Pascal Case.
    12. Renomeação das enumerações StrokeCap para seguir o padrão Pascal Case.
    13. Atualização da implementação de DrawCache para não usar mais parâmetros lateinit.
    14. Atualização de DrawScope para não usar mais delegação lenta para os parâmetros internos fillPaint e strokePaint.
    15. Atualização do composto Image para evitar o uso do Box e ter menos sobrecarga.
    16. Atualização da classe Outline para ter anotações @Immutable.
    17. Atualização de PathNode para ter anotações @Immutable em cada instrução de caminho.
    18. Atualização da subcomposição Vector para remover verificações condicionais redundantes para fins de igualdade, já que o composto já as processa.
    19. Suspensão do uso de métodos construtores de Rect em favor de construtores de função.
    20. Atualização de classes Brush e construtores de função com APIs @Immutable e @Stable.
    21. Atualização da enumeração VertexMode para seguir o padrão Pascal Case.
    22. Atualização do método DrawScope selectPaint para substituir condicionalmente os parâmetros de traço na pintura quando eles tiverem mudado.
    23. Atualização de Size para adicionar a desestruturação da API, renomear UnspecifiedSize para Unspecified e remover métodos não utilizados.
  • Atualização do consumo da API BlendMode para mapear adequadamente entre os modos BlendModes e PorterDuff do framework do Android, dependendo do nível da API. Introdução da API BlendMode#isSupported para determinar se BlendMode é compatível com o dispositivo antes de ser usado (I0ef42).
  • Adição de LazyItemScope no parâmetro itemContent de listas Lazy. Ele fornece modificadores para preencher o tamanho máximo pai, que resolve o caso de uso quando o item precisa preencher a janela de visualização e o Modifier.fillMaxSize() normal não funciona, já que o item é medido com restrições de infinito (Ibd3b2, b/162248854).
  • Remoção de SemanticsNodeInteraction.performPartialGesture. Use SemanticsNodeInteraction.performGesture (Id9b62).
  • Renomeação de LazyColumnItems como LazyColumnFor. Renomeação de LazyRowItems como LazyRowFor (I84f84).
  • Nivelação do pacote foundation.shape.corner para foundation.share (I46491, b/161887429).
  • Renomeação de AndroidComposeTestRule como createAndroidComposeRule (I70aaf).
  • Adição de mais APIs a TextLayoutResult (Id7e04).
  • Renomeação de FilledTextField do Material como TextField e de TextField de base como BaseTextField a fim de facilitar a descoberta e o uso da API mais simples desejada (Ia6242, b/155482676).
  • Renomeação de Modifier.drawBackground como Modifier.background (I13677).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.compose.ui:ui-*:0.1.0-dev15. A versão 0.1.0-dev15 contém estas confirmações.

Atualização de dependências

  • Para usar a versão 0.1.0-dev15 do Compose, será necessário atualizar suas dependências de acordo com os novos snippets de código mostrados acima em Como declarar dependências.

Mudanças em APIs

  • FocusModifier está obsoleto e foi substituído por Modifier.focus, Modifier.focusRequest e Modifier.focusObserver. FocusState e FocusDetailedState estão obsoletos e foram substituídos por FocusState2 (I46919, b/160822875, b/160922136).
  • Adição de um modificador para observar a mudança do estado do foco (I05866, b/160924455, b/160923326).
  • Adição de um modificador para solicitar mudanças de foco (I8dd73, b/161182057, b/160924778).
  • Ajuste no menu da Barra de Ferramentas Google para mostrar os comandos de copiar, recortar e colar corretamente (Id3955).
  • As propriedades de semântica de valor único agora usam um estilo de chamada. Por exemplo, "semantics {hidden = true}" agora é escrito como: semantics { hidden() } (Ic1afd, b/145951226, b/145955412).
  • Adição de Modifier.focus para substituir FocusModifier (Ib852a, b/160924778).
  • Adição de FloatingToolbar para a seleção de TextField (Ie8b07).
  • Adição de uma anotação de API experimental à API relacionada a entrada de chaves (I53c0a).
  • Adição de uma anotação de API experimental a todas as APIs relacionadas a foco (I53b24, b/160903352).
  • Adição de FocusState2, que substituirá FocusDetailedState (I0a3ba, b/160822595).
  • Adição de ExperimentalFocus, que é uma anotação @OptIn para a API Focus (I1544b, b/160820961).
  • Adição de uma classe de unidade IntBounds, que representa os limites de pixels inteiros do layout. A API de PopupPositionProvider foi atualizada para usar essa classe (I0d8d0, b/159596546).
  • Applier agora requer um método clear() para descartar composições (Ibe697).
  • KeyEvent está obsoleto e foi substituído por KeyEvent2 (I68730).
  • Adição de uma nova sinalização opcional, useUnmergedTree, aos localizadores de teste (I2ce48).
  • Criação da API experimental LayoutNode (I4f2e9).
  • Adição de métodos de cópia a vários tipos de classe in-line, incluindo:

    • Offset
    • Size
    • Radius
    • Motion
    • TransformOrigin

    • O método de objeto complementar Size.copy está obsoleto e foi substituído pelo método de cópia de instância (Ife290, b/159905651).

  • Pop-ups, caixas de diálogo e menus agora herdam o MaterialTheme contextual (Ia3665, b/156527485).

  • TextDirection foi renomeado como ResolveTextDirection (I3ff38).

  • O parâmetro de direção do layout foi removido do bloco de medida da função Layout(). No entanto, a direção do layout está disponível dentro do callback com o objeto do escopo da medida (Ic7d9d).

  • Refatoração de SelectionHandles para reutilização (I420e0).

  • Clickable foi removido. Agora use Modifier.clickable (I84bdf).

  • TestTag e Semantics foram excluídos. Agora use Modifier.testTag e Modifier.semantics (I15ff0, b/158841414).

  • Antes da mudança, o plug-in do compilador do Compose interceptava chamadas a construtores dentro de uma função @Composable se houvesse um (I5205a, b/158123804).

  • Modifier.tag foi renomeado como Modifier.layoutId para evitar confusão com Modifier.testTag (I995f0).

  • Agora, as posições de Int da linha de alinhamento retornadas de Placeable#get(AlignmentLine) não são nulas. Se a linha de alinhamento consultada estiver ausente, AlignmentLine.Unspecified será retornado (I896c5, b/158134875).

  • Adição de um parâmetro modificador ao composto AndroidView (I48a88, b/158746303).

  • Suspensão do uso de Semantics(). Use Modifier.semantics() (I72407, b/158841414).

  • Adição do composto viewModel(), que permite criar ou usar o ViewModel já criado de forma semelhante a como ele funciona em Activity ou Fragment (I5fdd1).

  • Uso de IntPx substituído por Int e o de IntPxPosition por IntOffset. IntPxSize foi substituído por IntSize (Ib7b44).

  • Para consolidar o número de classes usadas para representar informações de tamanho, padronize o uso da classe Size em vez de PxSize. Isso fornece os benefícios de uma classe in-line para usar um long para empacotar dois valores de pontos flutuantes e representar a largura e a altura como flutuantes (Ic0191).

  • Para consolidar o número de classes usadas para representar informações de posicionamento, padronize o uso da classe Offset em vez de PxPosition. Isso fornece os benefícios de uma classe in-line para usar um long para empacotar dois valores de pontos flutuantes e representar os deslocamentos x e y como flutuantes (I3ad98).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel. Classe Px excluída na íntegra (I3ff33).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I086f4).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (Id3434).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I97a5a).

  • Suspensão do uso de TestTag. Use Modifier.testTag (If5110, b/157173105).

  • A implementação padrão, de ambiente autônomo, de ParentDataModifier#modifyParentData foi removida. Ela era equivalente a não implementar a interface primeiro (I0deaa).

  • Remoção de ScaleFit que estava obsoleta. Use ContentScale (Ifbc5b).

  • Substituição do uso da classe Px em várias classes Compose como parte do grande esforço de refatoração para depender apenas de tipos primitivos e de Dp para os parâmetros de pixel (I19d02).

  • Adição do componente DropdownMenu ao ui-material, uma implementação do menu do Material Design (I9bb3d).

  • Remoção da LayoutTag() obsoleta. Agora use a Modifier.tag(). Remoção do Modifier.matchParent() suspenso. Use Modifier.matchParentSize() (If8044).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I57bff).

  • O Modifier.semantics foi suspenso para permitir o uso de componentes de alto nível (I4cfdc).

  • Implementações consolidadas de CanvasScope para que agora exista apenas DrawScope e ContentDrawScope. CanvasScope foi renomeado como DrawScope. Atualização de DrawScope para implementar a interface de Density e fornecer LayoutDirection. Exclusão da subclasse DrawScope em ContentDrawScope. Painter e PainterModifier foram atualizados para não manter mais uma propriedade RTL porque DrawScope já fornece isso sem ser de forma manual (I1798e).

  • DoubleTapGestureFilter agora desambigua SingleTapGestureFilter na árvore (If92b1).

  • Atualização da API Alignment e adição de compatibilidade para alinhamento absoluto, o que não será espelhado automaticamente no contexto RTL (I38cd3).

  • Mudança na API DrawLayer Modifiers: outlineShape foi renomeada como Shape e tem o valor padrão RectangleShape, agora não anulável. clipToOutline foi renomeado como clip. clipToBounds foi removido porque é o mesmo que clip == true com RectangleShape (I7ef11, b/155075735).

  • Atualização das APIs de composição de nível superior que expõem uma tela para expor CanvasScope. Isso elimina a necessidade dos consumidores manterem seus próprios objetos do Paint. Os consumidores que ainda precisam de acesso a uma tela podem usar o método de extensão drawCanvas, que fornece um callback para emitir comandos de desenho (I80afd).

  • A API WithConstraints lambda final foi mudada. Agora, em vez de dois parâmetros, ela tem um escopo de receptor que, além de restrições e layoutDirection, fornece as propriedades minWidth, maxWidth, minHeight e maxHeight no Dp (I91b9a, b/149979702).

  • LayoutModifier2 foi renomeado como LayoutModifier (Id29f3).

  • Remoção da interface de LayoutModifier obsoleta (I2a9d6).

  • As funções de medições intrínsecas em Layout e LayoutModifier2 agora têm um receptor IntrinsicMeasureScope que fornece uma API de consulta intrínseca com a direção de layout propagada implicitamente (Id9945).

  • Os filhos de Layout e LayoutModifier podem ser medidos com uma direção de layout diferente (Ibd731).

  • Adicionado novo Modifier.zIndex() para controlar a ordem do desenho dos filhos no mesmo layout pai. A propriedade elevation em DrawLayerModifier foi renomeada como shadowElevation e não controla mais a ordem do desenho. A ordem dos parâmetros para DrawShadow foi modificada: o elevation agora é o primeiro e o shape o segundo, com RectangleShape como padrão (I20150, b/152417501).

  • Remoção de onSizeChange e onPositionChange em Owner (I5c718).

  • Adição de Constraints2, uma cópia de Constraints que só aceita valores de restrições do Int em vez de IntPx. IntPx será removido, e todas as restrições inteiras serão consideradas pixels como o Android.

    • Adição de IntSize também, que acabará substituindo IntPxSize (I4b43a).
  • Alignment se tornou instanciável com valores arbitrários. Adição de Alignments 1D (Ia0c05).

  • alignToSiblings agora aceita um Measured em vez de Placeable (I5788d).

  • (I45f09, b/152842521)

    • ScaleFit foi renomeado como ContentScale.
    • O ContentScale foi movido do ui-graphics para o ui-core para ficar no mesmo módulo que a API Alignment.
    • FillMaxDimension foi renomeado como Crop.
    • ContainerMinDimension foi renomeado como Fit.
    • Fit foi renomeado como Inside para melhor correspondência.
    • Equivalentes de ImageView.ScaleType
    • Adição de documentação que indica que a combinação de Crop e Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_CROP, que Fit usado com Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_INSIDE e que Inside usado com Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_INSIDE.
  • Compatibilidade com RTL para modificadores de desenho (I0aaf9).

  • Lançamento da API para inflar o Android Views no XML. Consulte a demonstração do ViewInCompose para ver mais detalhes (I42916).

  • Melhora na API DrawModifier:

    • Definição do escopo do receptor para draw() ContentDrawScope.
    • Remoção de todos os parâmetros em draw().
    • DrawScope tem a mesma interface que o antigo CanvasScope.
    • ContentDrawScope tem o método drawContent() (Ibaced, b/152919067).
  • Adição de positionInParent e boundsInParent a LayoutCoordinates (Icacdd, b/152735784).

  • DrawLayerModifier e drawLayer() agora definem clickToBounds e clipToOutline como falsos por padrão (I0eb8b, b/152810850).

  • LayoutResult foi renomeado como MeasureResult (Id8c68).

  • Adição de LayoutModifier2, uma nova API para definir modificadores de layout. Suspensão do uso de LayoutModifier (If32ac).

  • Substituição de Modifier mais operador por funções de extensão de fábrica (I225e4).

  • Adição de propriedades translationX/Y para oferecer compatibilidade com o ajuste da lista de exibição para comandos de desenho de determinada camada. Isso é útil para mover conteúdos em resposta a animações ou eventos de toque (I22c16).

  • Adição de parâmetros pivotX e pivotY às APIs Layer para oferecer compatibilidade com a rotação e o dimensionamento em torno de um determinado ponto em uma camada (Icf7c3).

  • Adição de OnPositionedModifier e OnChildPositionedModifier para substituir as funções compostas OnPositioned e OnChildPositioned (I2ec8f).

  • Adição de LayerModifier, um modificador que permite adicionar um RenderNode a um Layout. Ele permite definir o recorte, a opacidade, a rotação, o dimensionamento e as sombras. Ele substituirá o RepaintBoundary (I7100d, b/150774014).

  • A direção do layout passou a ser propagada do nó de layout pai para os filhos. Adição de modificador de direção de layout (I3d955).

  • O componente Stack é compatível com a direcionalidade da direita para a esquerda (Ic9e00).

  • Compatibilidade inicial com o layout RTL no Compose (Ia5519).

  • Density e DensityScope foram unidos em uma única interface. Agora você pode usar DensityAmbient.current em vez de ambientDensity(). Em vez de withDensity(density), apenas with(density) (I11cb1).

  • Mudanças no LayoutCoordinates para fazer com que providedAlignmentLines seja um Set em vez de um Map e fazer com que LayoutCoordinates implemente o operador get() em vez de recuperar um valor. Isso facilita a modificação de um ou mais valores do conjunto sem criar uma nova coleção para cada modificador (I0245a).

  • LayoutGoordinates não tem mais uma propriedade de posição. A propriedade de posição não faz sentido ao considerar LayoutModifiers, rotação ou dimensionamento. Em vez disso, os desenvolvedores precisam usar parentCoordinates e childToLocal() para calcular a transformação de um LayoutCoordinate em outro.

    LayoutCoordinates usa IntPxSize para a propriedade Size em vez de PxSize. Os layouts usam tamanhos de pixel inteiros. Portanto, todos os tamanhos de layout precisam usar números inteiros, e não valores de pontos flutuantes (I9367b).

  • Melhorias na superfície da API de Constraints (I0fd15)

  • Criação da API CanvasScope que envolve um objeto Canvas para expor uma superfície de API de desenho declarativa e sem estado. As transformações estão contidas no próprio escopo do receptor, e as informações de dimensionamento também têm escopo para os limites inseridos correspondentes. Não é necessário que um consumidor mantenha o próprio objeto de estado Paint para configurar operações de desenho.

    • Inclusão do CanvasScopeSample, bem como atualização do app de demonstração para incluir uma demonstração gráfica declarativa (Ifd86d).
  • Remoção da API MaskFilter não utilizada porque tem uso limitado e não é otimizada para aceleração de hardware na maioria dos casos de uso (I54f76).

  • RectangleShape movido de androidx.ui.foundation.shape.* para androidx.ui.graphics.* (Ia74d5, b/154507984).

  • Todos os usos anuláveis de Color foram substituídos na API por não anuláveis e usam Color.Unset em vez de null (Iabaa7).

  • Introdução do parâmetro opcional rect extra a ImagePainter para permitir o desenho de uma subseção de ImageAsset subjacente (I0ea9e).

  • Adição de Unset Color para representar um valor não definido sem Colors embaladas (If901a).

  • Adição dos métodos de extensão Canvas.rotate e Canvas.scale para consumir coordenadas dinâmicas opcionais para transformações. O padrão deles é o canto superior esquerdo da atual tradução de Canvas.

    O Canvas.rotateRad também foi movido para ser um método de extensão para fins de consistência (Ibaca6).

  • Criação da API PixelMap para oferecer compatibilidade com consultas de informações de pixel de um ImageAsset (I69ad6).

  • toFrameworkRect/toFrameworkRectF foi renomeado como toAndroidRect/toAndroidRectF para corresponder à convenção de nomenclatura para conversões de objetos entre o Compose e as APIs do framework do Android sobre os quais elas são realizadas. Os documentos dessas APIs também foram atualizados (I86337).

  • Adição da API VectorPainter para substituir a API de subcomposição já existente para gráficos vetoriais. O resultado da subcomposição é um objeto VectorPainter em vez de um DrawModifier. O uso de compostos DrawVector anteriores foi suspenso e substituído pelo VectorPainter.

    A API Image(Painter) foi renomeada como PaintBox(Painter). Criação do composto Vector que se comporta como o composto Image, mas com um VectorAsset em vez de um Image Asset(I9af9a, b/149030271).

  • Image foi renomeado como ImageAsset para diferenciar melhor os dados do Image e o futuro composto Image, usado para participar do layout e desenhar conteúdo. Foi criado o método de extensão _Body:Created em android.graphics.Bitmap, Bitmap.asImageAsset(), para criar uma instância de um ImageAsset útil para combinar o desenvolvimento de aplicativos para Android tradicionais com o framework do Compose (Id5bbd).

  • Adição de TextDirection.Content (I48f36).

  • Adição do operador TextDecoration.plus (I0ad1a).

  • Force foi removido dos valores de enum TextDirectionAlgorithm (Icc944).

  • TextDirectionAlgorithm foi renomeado como TextDirection (I75ce8).

  • Implementação de LongpressAndDrag para seleção de TextField (I17919).

  • Adição de AnnotatedString.getStringAnnotations que retorna todas as anotações dentro do intervalo (I1fa00).

  • Mudança do nome do pacote para Locale e LocaleList de androidx.ui.text para androidx.ui.intl (I8132c).

  • O cursor do TextField tem uma animação intermitente (Id10a7).

  • Mudança de API: AnnotatedString(builder: Builder) foi renomeada como anotadorString(builder: Builder) (Ia6377).

  • Mudança de API: AnnotatedString.Item foi renomeada como AnnotatedString.Range (I2d44d).

  • AnnotatedString.Builder.addAnnotationString foi renomeada como addStringAnnotation (I5059e).

  • Agora é possível ocultar/mostrar o teclado do software usando o SoftwareKeyboardController que é entregue pelo callback onTextInputStarted (I8dc44, b/151860051).

  • Adição do operador mais para o estilo (texto/parágrafo/período) que delega para a função merge() (Ia1add).

  • FontWeight.lerp não se ajusta mais. Ainda é uma classe de dados (I521c2).

  • O construtor FontWeight agora é público, não é mais uma classe de dados (Id6b1f).

  • Adição de getLineStart, getLineEnd, getEllipsisOffset e getEllipsisCount a TextLayoutResult (IBc801).

  • O módulo ui-text foi renomeado como ui-text-core (I57dec).

  • Remoção da classe Size não utilizada porque há uma classe Size duplicada no módulo ui-geometry sendo consumida (I1b602).

  • Adição do Adapterlist, um componente de lista de rolagem que apenas compõe e apresenta os itens visíveis. Os problemas conhecidos atualmente incluem o fato de que ele só é vertical e não processa integralmente todos os casos de mudança nos filhos (Ib351b).

  • Adição de parâmetros de padding, borda, forma e plano de fundo a Box (I05027, b/148147281).

Correções de bugs

  • O callback onFocusChange em campos de texto foi renomeado como onFocusChanged (Ida4a1).
  • O uso do VerticalScroller e do HorizontalScroller foi suspenso. Use ScrollableColumn e ScrollableRow para ter uma experiência integrada com o comportamento e os parâmetros de Column/Row, ou Modifier.verticalScroll e Modifier.horizontalScroll no próprio elemento. Da mesma forma, ScrollerPosition foi suspenso e substituído por ScrollState' (I400ce, b/157225838, b/149460415, b/154105299).
  • runOnIdleCompose foi renomeado como runOnIdle (I83607).
  • Várias APIs de teste foram renomeadas para serem mais intuitivas. Todas as APIs findXYZ foram renomeadas como onNodeXYZ. Todas as APIs doXYZ foram renomeadas como performXYZ (I7f164).
  • Agora é possível compor a IU do Compose dentro de ViewGroups sem precisar de uma nova composição. Consulte ViewInteropDemo para ver um exemplo (I9ab0b, b/160455080).
  • Adição de sortWith e removeRange ao MutableVector (Icccf7).
  • Implemente as alças de seleção para arrastar para mudar a seleção de TextField (I27032).
  • Remoção da classe in-line do Shader que encapsulava a classe NativeShader. NativeShader foi renomeada como Shader. A classe in-line Shader encapsulada não adicionava valor à superfície da API e era uma classe in-line. Portanto, use a classe NativeShader diretamente (I25e4d).
  • O PainterModifier foi refatorado para não fornecer mais dimensionamento com base nas restrições e no parâmetro ContentScale fornecidos. As implementações do Painter dimensionam o próprio conteúdo de desenho com base no tamanho especificado do DrawScope em que estão sendo desenhados.

    Corrigimos o problema em que o bitmap de cache de VectorPainter era dimensionado para o tamanho padrão em vez do tamanho fornecido para desenhar.

    Atualização de ImagePainter para dimensionar o próprio conteúdo em vez de confiar em PainterModifier para fazer isso por ele (I6ba90).

  • Adição de função withFrameNanos de nível superior para tempo de animação (Ie34c5).

  • A anotação @Untracked foi suspensa. Substitua por @ComposableContract(tracked=false) (Id211e).

  • Suspensão do uso de androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue. Os compostos TextField, FilledTextField e CoreTextField que usam esse tipo também foram suspensos. Agora use androidx.ui.input.TextFieldValue (I4066d, b/155211005).

  • Corrigimos o problema em que o envio de entrada do ponteiro causava uma falha se PointerInputFilters fosse removido por meio de subcomposição durante o envio. Isso já foi corrigido (I1f48b, b/157998762).

  • Corrigimos o problema em que o envio de entrada do ponteiro causava uma falha se PointerInputFilters fosse removido por meio de subcomposição durante o envio. Isso já foi corrigido (Iab398, b/157998762).

  • Classe de raio refatorada para ser uma classe in-line. Remoção dos métodos de criação complementares em favor do construtor de função com parâmetro padrão para que o raio ao longo do eixo y corresponda ao parâmetro obrigatório de raio do eixo x.

    Atualização de DrawScope.drawRoundRect para consumir um único parâmetro de raio em vez de dois valores flutuantes separados para o raio ao longo dos eixos x e y (I46d1b).

  • O composto Recompose não é mais uma abstração útil. A maioria das recomposições precisa acontecer como resultado de atribuições MutableState. Para qualquer coisa além disso, é recomendável usar a função invalidate para acionar uma recomposição do escopo atual (Ifc992).

  • Substituição do uso da classe Px em várias classes Compose como parte do grande esforço de refatoração para depender apenas de tipos primitivos e de Dp para os parâmetros de pixel (Iede0b).

  • Muda a estratégia de geração de código do compilador do Compose. Antes da mudança, ele transformava chamadas em funções compostas. Com essa mudança, agora transformamos o corpo de uma função composta e deixamos o local de chamadas praticamente inalterado.

    Isso significa que a maior parte da lógica que se comunica com o ambiente de execução do Compose acontece no início do corpo da função e não no local de chamadas.

    Essa deve ser uma mudança compatível com a fonte para todo o uso do Compose. A maioria dos usuários do Compose não precisa atualizar nenhum código como resultado dessa mudança.

    Para oferecer suporte a esse trabalho, a assinatura JVM de todas as funções compostas foi mudada. Uma função composta que aceita um único parâmetro é transformada em uma função que aceita três parâmetros. Os parâmetros adicionais são o Composer, um número inteiro "chave", um inteiro de bitmask usado para propagar metadados por meio de chamadas.

    O Compose agora também transforma argumentos padrão em uma função composta. Ele faz isso sem introduzir uma sobrecarga padrão sintética adicional da própria função. Portanto, essa mudança resultará na definição de menos funções.

    Mudanças comportamentais intencionais conhecidas resultantes disso:

    1. Algumas chamadas serão ignoradas.
    2. As expressões compostas em expressões de argumento padrão agora são corretamente inscritas e processadas.

    Esse trabalho incluiu algumas otimizações: 1. O resultado das comparações de parâmetros é propagado por meio do gráfico de chamadas para outras funções compostas. Isso resultará em menos comparações no momento da execução, reduzirá o tamanho da tabela de slots, bem como mais pulos de funções compostas que não foram ignoradas anteriormente. 2. Os parâmetros que são determinados como "estáticos" no momento da compilação não são mais comparados ou armazenados no ambiente de execução. Isso reduz o número de comparações e o tamanho da tabela de slots. 3. A estrutura do controle de fluxo do corpo das funções é usada para minimizar o número de grupos gerados. Isso reduz o tamanho da tabela de slots e resulta em menos trabalho para o ambiente de execução. 4. Os parâmetros de envio e destinatário não utilizados para funções não são incluídos para determinar a possibilidade de pular a função se eles não forem usados dentro do corpo da função.

    A maioria das mudanças interruptivas foi feita em APIs que o compilador segmenta diretamente. O uso típico do Compose não será afetado: 1. Composer::startExpr foi removido. 2. Composer::endExpr foi removido. 3. O Composer::call foi suspenso. 4. As sobrecargas que não são varargs de key foram removidas. Use a versão vararg daqui em diante. 5. A anotação Pivotal foi suspensa. Use key como substituto. 6. Modificação de ScopeUpdateScope::updateScope para esperar uma Function3 em vez de Function1 7. Atualização de restartableFunction e restartableFunctionN para incluir outros parâmetros de tempo de compilação (I60756, b/143464846).

  • Remoção dos modificadores do LayoutAlign obsoletos (I10877).

  • Remoção de RepaintBoundary em favor de DrawLayerModifier (I00aa4).

  • Agora, Button, FloatingActionButton e Clickable têm um parâmetro enabled separado. Alguns dos parâmetros no Button foram renomeados ou reordenados (I54b5a).

  • Substituição de ButtonStyle por funções distintas e remoção da sobrecarga de texto (string). Veja amostras atualizadas para informações de uso (If63ab, b/146478620, b/146482131).

  • Alterações interruptivas na API de ambientes. Consulte o registro e a documentação do Ambient<T> para ver detalhes (I4c7ee, b/143769776).

  • Mudança no comportamento de TextDirection padrão para ser determinado por LayoutDirection. Por exemplo, se LayoutDirection for RTL, TextDirection padrão será RTL. Antes era TextDirection.ContentOrLtr/Rtl (I4e803).

  • Correção de bug: quando o peso e o estilo da fonte são aninhados em uma AnnotatedString, o texto não é renderizado de maneira correta (I77a9d).

  • Adição de parâmetros comumente usados a Text(). Se você estiver criando um estilo de texto local para transmitir um pequeno número desses parâmetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), poderá fornecer os parâmetros diretamente: Text(textAlign = TextAlign.Center) (I82768).

  • O módulo ui-android-text foi renomeado como ui-text-android (I68cbe).