O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

IU do Compose

Guia do usuário  Amostra de código (link em inglês)
Componentes fundamentais da IU do Compose 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
11 de novembro de 2020 - - - 1.0.0-alpha07

Estrutura

O Compose é uma combinação de sete 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 @Composable e ative otimizações com um plug-in do compilador Kotlin.
compose.foundationCrie aplicativos do Jetpack Compose com blocos de construção 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.
iuFunciona com a biblioteca Jetpack Compose.

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:

dependencies {
    implementation "androidx.compose.ui:ui:1.0.0-alpha03"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.0"
        kotlinCompilerExtensionVersion "1.0.0-alpha03"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}

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

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 (link em inglês) nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar novo problema (link em inglês)

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

Versão 1.0.0

Compose IU 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.

Novos recursos

Mudanças na API

  • 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).
  • Remoção da anotação ExperimentalSubcomposeLayoutApi. O SubcomposeLayout agora pode ser usado sem a adição de @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).
  • O 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).
  • O módulo androidx.ui.test está obsoleto. Migre para androidx.compose.ui.test e androidx.compose.ui.test.junit4 (I452e8).

Correções de bugs

  • captureToBitmap foi movido para captureToImage (I86385).
  • foundation.Text está obsoleto e 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).
  • Atualize TextFields para aceitar KeyboardOptions (Ida7f3).
  • TecladoOptions foi renomeado 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).
  • BaseTextField foi suspenso. Use BasicTextField (I896eb).
  • Introdução do módulo ui-test-junit4 (Ib91f8).
  • relativePaddingFrom foi renomeado 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. O LaunchedEffect sem parâmetros de assunto não será permitido para incentivar as práticas recomendadas (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 devem afetar 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

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

Mudanças na API

  • 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 no ComposeTestRule. Remoção da opção para ativar o cursor piscante em 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).
  • A 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).
  • Transformação de Box em 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 na API

  • Adição de uma DSL para especificar informações do inspetor (Ic9a22)
  • LongPress movido para Text (Iff2bc)
  • Suspensão do modificador de entrada pelo Modifier.pointerInput experimental (Ia77d2)
  • Adição de ações de acessibilidade de copiar/colar/cortar (I6db4f)
  • O construtor público para AndroidOwner foi removido (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)

  • Realização de onGloballyPosition de 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/116148752)

  • 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 in-line, renomeie a Color.Unset como Color.Unspecified para consistência com outras classes in-line (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 causasse a tradução do app, as coordenadas da entrada do ponteiro ficariam 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 na API

  • 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 for medido novamente e quando o tamanho mudar, respectivamente (I657cf, b/154108792).
  • Adição de ação de 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).

  • O TextRange se torna 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 por meio dos construtores de função deles.
    • Remoção das APIs RoundRect para consultar topRight, bottomRight, bottomCenter etc.
    • Substituição do Rect.shift obsoleto 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).
  • foundation.Box está obsoleto. Use foundation.layout.Box (Ie5950, b/167680279).
  • Stack foi renomeado como Box. O uso do Box anterior será suspenso 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 estão obsoletos. 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 obsoleto
    • (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 do 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 na API

  • 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 gerencia 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 para itens de LazyColumn que às vezes são desenhados incorretamente. Isso também causava falhas em algumas condições (Ibcf17, b/163066980, b/165921895).
  • O 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 se tornarão obsoletos (Ieae36).

Versão 1.0.0-alpha02

2 de setembro de 2020

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

Mudanças na API

  • Remova o callback para notificar o proprietário quando os limites do layoutnode mudarem. If654e, b/166106882
  • Adição de suporte a parâmetros de tipo de preenchimento em caminhos de gráficos vetoriais para ter 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).
  • A duração agora é uma classe in-line (I565eb).
  • Adicione um callback para notificar o proprietário quando os limites do layoutnode mudarem. 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

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

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

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

Mudanças na API

  • emitView foi suspenso. 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).

  • Remoção de onChildPositioned e OnChildPositionedModifier. Os desenvolvedores precisam usar onPositioned e OnPositionedModifier no layout filho (I4522e, b/162109766).

  • Offset se tornou 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).

  • As restrições agora são uma classe inline (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 suspensão de uso/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. 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 para 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 essas confirmações.

Mudanças na API

  • Suspensão do uso de OnChildPositioned. Use OnPositioned no filho (I87f95, b/162109766).
  • Suspensão de setViewContent. 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).
  • FocusManager está obsoleto. 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 existentes (I5bcfd).
  • Suspensão do uso de Modifier.plus. 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. Ele 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 para 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 para LazyColumnFor. Renomeação de LazyRowItems para LazyRowFor (I84f84).
  • Nivelação do pacote foundation.shape.corner para foundation.share (I46491, b/161887429).
  • AndroidComposeTestRule foi renomeado como createAndroidComposeRule. (I70aaf).
  • Adição de mais APIs a TextLayoutResult (Id7e04).
  • Renomeação do FilledTextField do Material para TextField e do TextField de base para 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 do androidx.compose.ui:ui-*:0.1.0-dev15. A versão 0.1.0-dev15 contém essas 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 na API

  • 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 o FocusModifier (Ib852a, b/160924778).
  • Adição da FloatingToolbar para a seleção do 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).
  • O 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 inline, 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 por meio do objeto do escopo de medida (Ic7d9d).

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

  • Clickable foi removido. Use Modifier.clickable (I84bdf).

  • TestTag e Semantics foram excluídos. 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).

  • Foi adicionado um parâmetro modificador ao composto AndroidView (I48a88, b/158746303).

  • Semantics() foi suspenso. 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).

  • A TestTag agora está obsoleta. 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).

  • A ScaleFit já obsoleta foi removida. Use ContentScale (Ifbc5b).

  • 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 (I19d02).

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

  • Remoção da LayoutTag() obsoleta. Use a Modifier.tag(). Remoção do Modifier.matchParent() obsoleto. 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 o DrawScope e o ContentDrawScope. CanvasScope foi renomeado como DrawScope. Atualização do DrawScope para implementar a interface de Density e fornecer a LayoutDirection. Exclusão da subclasse DrawScope no ContentDrawScope. Painter e PainterModifier foram atualizados para não manter mais uma propriedade RTL porque o DrawScope já fornece isso sem ser de forma manual (I1798e).

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

  • Atualização da API Alignment e adição de compatibilidade para alinhamento absoluto, que não espelha 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 o 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 retorno de chamada para emitir comandos de desenho. (I80afd, link em inglês)

  • A API WithConstraints lambda final foi mudada. Agora, em vez de dois parâmetros, ela tem um escopo de receptor que, além de constraints 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 do LayoutModifier obsoleto (I2a9d6).

  • As funções de medições intrínsecas no Layout e no 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).

  • O novo Modifier.zIndex() foi adicionado 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 o IntPxSize (I4b43a).
  • Alignment se tornou instanciável com valores arbitrários. Adição de Alignments 1D (Ia0c05, link em inglês)

  • 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 aumentar o Android Views a partir do 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
    • O 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. O LayoutModifier foi suspenso (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, links em inglês)

  • 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, link em inglês).

  • Compatibilidade inicial com RTL no layout de 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).

  • Foram feitas 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.

    O 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 de Color anuláveis foram substituídos na API por não anuláveis e usam Color.Unset em vez de null (Iabaa7).

  • Introdução ao parâmetro opcional rect extra no ImagePainter para ser compatível com 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 renomeado 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 ao 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. (I4b7b0).

  • 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. De modo semelhante, o ScrollerPosition foi suspenso e substituído pelo 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 inline do Shader que encapsulava a classe NativeShader. NativeShader foi renomeado como Shader. A classe inline Shader encapsulada não adicionava valor à superfície da API e era uma classe inline. 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 do VectorPainter era dimensionado para o tamanho padrão em vez do tamanho fornecido para desenhar.

    Atualização do ImagePainter para dimensionar o próprio conteúdo em vez de confiar no 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).

  • androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue estão obsoletos. Os compostos TextField, FilledTextField e CoreTextField que usam esse tipo também foram suspensos. 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, links em inglês).

  • 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 inline. 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 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 (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 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 para APIs que o compilador segmenta diretamente e 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. ScopeUpdateScope::updateScope foi modificado para esperar uma Function3 em vez de Function1. 7. restartableFunction e restartableFunctionN foram atualizadas para incluir outros parâmetros de tempo de compilação (I60756, b/143464846).

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

  • Remoção do RepaintBoundary em favor do DrawLayerModifier (I00aa4, link em inglês)

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

  • O ButtonStyle foi substituído por funções distintas e a sobrecarga de texto (string) foi removida. 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 do TextDirection padrão para ser determinado pelo LayoutDirection. Por exemplo, se LayoutDirection for RTL, o 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 ao Text(). Se você estiver criando um estilo de texto local para passar 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).