IU

Funciona com a biblioteca do Jetpack Compose.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
1º de outubro de 2020 - - - 1.0.0-alpha04

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 à IU do 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 {
    // New dependencies
    implementation "androidx.compose.ui:ui-tooling:1.0.0-alpha08"
    implementation "androidx.compose.ui:ui-test:1.0.0-alpha08"

    // Old dependencies
    implementation "androidx.ui:ui-tooling:1.0.0-alpha07"
    implementation "androidx.ui:ui-test:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

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

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

Versão 1.0.0-alpha04

1º de outubro de 2020

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

Mudanças na API

  • Uma função de suspensão foi adicionada a ComposeTestRule para aguardar a inatividade do app (I4212c, b/168226343, b/168227042).
  • Anotação de rootAnimationClockFactory, transitionEnabled, blinkingCursorEnabled e textInputServiceFactory com @VisibleForTesting, tornando-as APIs internas e ocultando o kdoc delas (I554eb, b/168308412).

Correções de bugs

  • 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).
  • Remoção do parâmetro inlineContent do Text com String de entrada. Ele não será usado porque inlineContent precisa funcionar com AnnotatedString (Ief403).

Versão 1.0.0-alpha03

16 de setembro de 2020

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

Mudanças na API

  • As funções de teste globais, como onNode ou waitForIde, agora estão obsoletas. Migre para as novas contrapartes que estão definidas em ComposeTestRule (I7f45a).
  • createAndroidComposeRule e AndroidInputDispatcher foram movidos de androidx.ui.test.android para androidx.ui.test (Idef08, b/164060572).
  • Adição de onNode e de outros métodos globais na ComposeTestRule, porque os atuais se tornarão obsoletos (Ieae36).
  • Correção de cálculos de tamanho e posição em GestureScope, o que causava, entre outros, a geração de gestos de deslizar inválidos (Iaf358, b/166589947).

Correções de bugs

  • Os usos da gravidade foram renomeados de forma consistente para align ou alignment nas APIs de layout (I2421a, b/164077038).
  • O InnerPadding foi renomeado como PaddingValues (I195f1, b/167389171).

Versão 1.0.0-alpha02

2 de setembro de 2020

Lançamento de androidx.ui:ui-test:1.0.0-alpha02 e androidx.ui:ui-tooling:1.0.0-alpha02. A versão 1.0.0-alpha02 contém essas confirmações.

Mudanças na API

  • O TestUiDispatcher é marcado como experimental (Iae99d, b/161247083).
  • A duração agora é uma classe in-line (I565eb).
  • Adição de ManualFrameClock.hasAwaiters para verificar se algo está aguardando um frame desse relógio, runWithManualClock como uma substituição de runBlocking ao executar testes que precisam de um ManualFrameClock e TestUiDispatcher.Main, que fornece acesso fácil ao principal agente de IU nos seus testes.

    Exemplo:

    @Test
    fun myTest() = runWithManualClock { clock ->
        // set some compose content
        withContext(TestUiDispatcher.Main) {
            clock.advanceClock(1000L)
        }
        if (clock.hasAwaiters) {
            println("The clock has awaiters")
        } else {
            println("The clock has no more awaiters")
        }
    }
    

    (I0a85b, b/161247083).

Correções de bugs

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

Versão 1.0.0-alpha01

26 de agosto de 2020

Lançamento de androidx.ui:ui-test:1.0.0-alpha01 e androidx.ui:ui-tooling: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

Lançamento de androidx.ui:ui-test:0.1.0-dev17 e androidx.ui:ui-tooling:0.1.0-dev17. A versão 0.1.0-dev17 contém essas confirmações.

Mudanças na API

  • Offset se tornou uma classe in-line (Iaec70).
  • IntSize agora é uma classe in-line (I2bf42).
  • AlertDialog agora usa FlowRow para botões (I00ec1, b/161809319, b/114368374).
  • Adição da função createAndroidComposeRule, que usa um Class<T : ComponentActivity> como parâmetro para criar facilmente uma AndroidComposeRule usando determinada classe de atividade (I40da4).

Correções de bugs

  • Atualização de nomes de PointerEventPass para a versão Alfa (Ifda6f).
  • 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).
  • 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).
  • 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).
  • O spacedBy Arrangement foi adicionado para Row e Column, para possibilitar o posicionamento dos filhos de layout com um espaçamento fixo. O aligned Arrangement também foi adicionado, para permitir que o posicionamento dos filhos do layout seja um ao lado do outro e alinhados à Row/Column de acordo com um alinhamento. Os métodos anteriores Arrangement.Vertical#arrange e Arrangement.Horizontal#arrange foram suspensos e a criação de Arrangements personalizados não será mais possível no futuro (I6733d, b/161985975).
  • Suspensão do uso de Modifier.drawBorder. Use Modifier.border. A classe de dados Border foi substituída por BorderDraw (I4257d, b/158160576).

Versão 0.1.0-dev16

5 de agosto de 2020

Lançamento de androidx.ui:ui-test:0.1.0-dev16 e androidx.ui:ui-tooling:0.1.0-dev16. A versão 0.1.0-dev16 contém essas confirmações.

A maioria dos pacotes do Jetpack Compose foi refatorada de acordo com a tabela abaixo.

Refatoração de pacotes do Jetpack Compose

Nome do pacote antigo Nome do novo pacote
androidx.animation androidx.compose.animation.core
androidx.ui.autofill androidx.compose.ui.autofill
androidx.compose androidx.compose.runtime
androidx.compose.dispatch androidx.compose.runtime.dispatch
androidx.ui.animation androidx.compose.animation
androidx.ui.core androidx.compose.ui
androidx.compose.ui.unit
androidx.compose.ui.graphics
androidx.ui.foundation androidx.compose.foundation
androidx.ui.geometry androidx.compose.ui.geometry
androidx.ui.graphics androidx.compose.ui.graphics
androidx.ui.input androidx.compose.ui.text.input
androidx.ui.intl androidx.compose.ui.text.intl
androidx.ui.layout androidx.compose.foundation.layout
androidx.ui.livedata androidx.compose.runtime.livedata
androidx.ui.material androidx.compose.material
androidx.ui.material.icons androidx.compose.material.icons
androidx.ui.rxjava2 androidx.compose.runtime.rxjava2
androidx.ui.savedinstancestate androidx.compose.runtime.savedinstancestate
androidx.ui.node androidx.compose.ui.node
androidx.compose.ui.input.pointer
androidx.ui.platform androidx.compose.ui.platform
androidx.ui.res androidx.compose.ui.res
androidx.ui.semantics androidx.compose.ui.semantics
androidx.ui.testutils androidx.compose.ui.input.pointer
androidx.ui.text androidx.compose.foundation.text
androidx.compose.ui.text
androidx.ui.text.platform androidx.compose.ui.text.android
androidx.compose.ui.platform
androidx.ui.unit androidx.compose.ui.unit
androidx.ui.util androidx.compose.ui.util
androidx.ui.viewinterop androidx.compose.ui.viewinterop
androidx.ui.viewmodel androidx.compose.ui.viewinterop
Ainda não refatorado (sem mudanças)
androidx.ui.test
androidx.ui.tooling

Se você estiver usando o Android Studio, poderá substituir as instruções de importação pelo snippet de código abaixo e usar o botão Optimize Imports no Android Studio. Para casos que o Android Studio não abrange, consulte a lista de pacotes acima.

  import androidx.compose.runtime.*
  import androidx.compose.animation.*
  import androidx.compose.animation.core.*
  import androidx.compose.foundation.*
  import androidx.compose.foundation.gestures.*
  import androidx.compose.foundation.layout.*
  import androidx.compose.foundation.lazy.*
  import androidx.compose.foundation.shape.*
  import androidx.compose.material.*
  import androidx.compose.material.icons.*
  import androidx.compose.material.icons.filled.*
  import androidx.compose.ui.*
  import androidx.compose.ui.geometry.*
  import androidx.compose.ui.draw.*
  import androidx.compose.ui.graphics.*
  import androidx.compose.ui.graphics.drawscope.*
  import androidx.compose.ui.graphics.painter.*
  import androidx.compose.ui.graphics.vector.*
  import androidx.compose.ui.layout.*
  import androidx.compose.ui.platform.*
  import androidx.compose.ui.res.*
  import androidx.compose.ui.text.*
  import androidx.compose.ui.text.font.*
  import androidx.compose.ui.text.style.*
  import androidx.compose.ui.unit.*
  import androidx.compose.ui.util.*
  import androidx.compose.ui.viewinterop.*
  import androidx.ui.tooling.preview.*

Mudanças na API

  • KeyEvent2 foi substituído por KeyEvent (I2d770, b/162097585).
  • Remoção de SemanticsNodeInteraction.performPartialGesture. Use SemanticsNodeInteraction.performGesture (Id9b62).
  • Renomeação de SemanticsNodeInteraction.getBoundsInRoot() como SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafd, b/113333632).
  • Renomeação de AndroidComposeTestRule como createAndroidComposeRule (I70aaf).
  • Adição de isFocused() e isNotFocused() SemanticsMatcher (I0b760).
  • Remoção de BaseGestureScope.globalBounds, que não pode ser usado em testes. Use coordenadas locais para o nó com que você está interagindo (Ie9b08).
  • Melhoria na precisão da API Inspector (I3cfbf).

Correções de bugs

  • A caixa de diálogo foi movida para a IU (I47fa6)
  • 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).
  • Exigência de que o tipo T seja especificado explicitamente para o transitionDefinition (I1aded).
  • Suspensão do uso de Modifier.plus. Use Modifier.then. "Then" tem um sinal mais forte de ordem, mas também proíbe a digitação de Modifier.padding().background() + anotherModifier, que interrompe a cadeia e é mais difícil de ler (Iedd58, b/161529964).
  • Adição de SemanticsNode.positionInRoot para receber a posição de um SemanticNodes em relação à raiz da hierarquia do Compose (Icdf26, b/161336532).
  • Adição de ação de acessibilidade para receber o TextLayoutResult (I9d6e6).
  • O FilledTextField do Material foi renomeado como TextField, e o TextField de base foi renomeado como BaseTextField para facilitar a descoberta e o uso da API mais simples desejada (Ia6242, b/155482676).
  • Modifier.drawBackground foi renomeado como Modifier.background (I13677).
  • Renomeação de ColorPalette como Colors, para mapear melhor o sistema de cores do Material Design e eliminar a confusão sobre ColorPalette ser um objeto de tema "genérico", em vez de uma implementação específica do sistema de cores do Material Design. lightColorPalette e darkColorPalette foram renomeados como lightColors e darkColors, respectivamente (I9e976, b/161812111).
  • O pacote foundation.shape.corner foi nivelado para foundation.share (I46491, b/161887429).
  • Row e Column agora executam funções in-line reduzindo significativamente a sobrecarga de uso (I75c10).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.ui:ui-test:0.1.0-dev15 e androidx.ui:ui-tooling:0.1.0-dev15. A versão 0.1.0-dev15 contém essas confirmações.

A maioria dos artefatos do Jetpack Compose foi refatorada, de acordo com a tabela abaixo.

Observe que, nessa versão, apenas os nomes de artefatos foram refatorados. Em versões futuras, os nomes dos pacotes serão atualizados para seguir o novo nome de artefato.

Refatoração de artefatos do Jetpack Compose

Artefato antigo Novo artefato
androidx.compose:compose-dispatch androidx.compose.runtime:runtime-dispatch
androidx.compose:compose-runtime androidx.compose.runtime:runtime
androidx.ui:ui-animation androidx.compose.animation:animation
androidx.ui:ui-animation-core androidx.compose.animation:animation-core
androidx.ui:ui-core androidx.compose.ui:ui
androidx.ui:ui-foundation androidx.compose.foundation:foundation
androidx.ui:ui-geometry androidx.compose.ui:ui-geometry
androidx.ui:ui-graphics androidx.compose.ui:ui-graphics
androidx.ui:ui-layout androidx.compose.foundation:foundation-layout
androidx.ui:ui-livedata androidx.compose.runtime:runtime-livedata
androidx.ui:ui-material androidx.compose.material:material
androidx.ui:ui-material-icons-core androidx.compose.material:material-icons-core
androidx.ui:ui-material-icons-extended androidx.compose.material:material-icons-extended
androidx.ui:ui-rxjava2 androidx.compose.runtime:runtime-rxjava2
androidx.ui:ui-saved-instance-state androidx.compose.runtime:runtime-saved-instance-state
androidx.ui:ui-text androidx.compose.foundation:foundation-text
androidx.ui:ui-text-android androidx.compose.ui:ui-text-android
androidx.ui:ui-text-core androidx.compose.ui:ui-text
androidx.ui:ui-unit androidx.compose.ui:ui-unit
androidx.ui:ui-util androidx.compose.ui:ui-util
Ainda não refatorado (sem mudanças)
androidx.compose:compose-compiler
androidx.ui:ui-test
androidx.ui:ui-tooling

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

  • 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).
  • API para imprimir a semântica do app como uma hierarquia em vez de uma lista simples. Remova também SemanticsMatcher.any. Use findRoot().printToString() para imprimir a semântica (I866b5).
  • KeyEvent está obsoleto e foi substituído por KeyEvent2 (I68730).
  • Adição de uma nova sinalização opcional, useUnmergedTree, aos localizadores de teste (I2ce48).
  • Remoção de APIs obsoletas de teste de tamanho (Iba0a0).
  • 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).
  • Adição de um novo parâmetro de dispositivo a @Preview (I39049).

Correções de bugs

  • 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).
  • As propriedades de semântica de valor único agora usam um estilo de chamada. Por exemplo, "semantics {hidden = true}" agora é escrito assim: "semantics {hidden()}" (Ic1afd, b/145951226, b/145955412).
  • Adição de uma anotação de API experimental à API relacionada a entrada de chaves (I53c0a).
  • A API Transition foi modificada para retornar um TransitionState em vez de passar o TransitionState para filhos. Isso torna a API mais consistente com as APIs animate() (I24e38).
  • O Applier agora requer um método clear() para descartar composições (Ibe697).
  • Criação da API experimental LayoutNode (I4f2e9).
  • Pop-ups, caixas de diálogo e menus agora herdam o MaterialTheme contextual (Ia3665, b/156527485).
  • Adicão de função withFrameNanos de nível superior para tempo de animação (Ie34c5).
  • 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 da medida (Ic7d9d).
  • Use AnimationSpec em vez de AnimationBuilder nas APIs de nível superior para esclarecer o conceito de especificação de animação estática. Melhore a DSL de transição removendo o requisito de lambda para criar AnimationSpecs, como Tween, Spring. Em vez disso, os parâmetros do construtor são recebidos diretamente. Melhora na facilidade geral de uso do AnimationSpec para abrir construtores em vez de builders. Mudança na duração e no atraso de KeyFrames e Tween para Int. Isso elimina as transmissões desnecessárias e a sobrecarga de métodos (para oferecer compatibilidade com Long e Int) (Ica0b4).
  • Uma IllegalStateException será gerada se você tentar acionar uma sincronização na linha de execução principal, por exemplo, ao:

    runOnIdleCompose {
        findByTag(\"tag\").assertExists()
    }
    

    Remova a chamada para runOnIdleCompose nestas ocorrências:

    findByTag(\"tag\").assertExists()
    

    (Idced7, b/159224666)

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

  • O espaço de conteúdo do Button agora se comporta como o Row. Isso é útil quando você precisa ter um ícone com um texto. Veja exemplos em Button sobre como criá-lo (I0ff10, b/158677863).

Versão 0.1.0-dev14

24 de junho de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev14. A versão 0.1.0-dev14 contém essas confirmações (link em inglês).

Mudanças na API

  • O uso de IntPx foi substituído por Int. IntPxPosition foi substituído por IntOffset. IntPxSize foi substituído por IntSize (Ib7b44, link em inglês).
  • Para consolidar o número de classes usadas para representar informações de dimensionamento, padronizamos o uso da classe Size em vez de PxSize. Isso fornece os benefícios de uma classe inline para usar um long para empacotar dois valores de pontos flutuantes e representar a largura e a altura como flutuantes (Ic0191, link em inglês).
  • Para consolidar o número de classes usadas para representar informações de posicionamento, padronizamos o uso da classe Offset em vez de PxPosition. Isso fornece os benefícios de uma classe inline para usar um long para empacotar dois valores de pontos flutuantes e representar os deslocamentos x e y como flutuantes (I3ad98, link em inglês).
  • O uso da classe Px foi substituído em várias classes de composição, como parte do grande esforço de refatoração para depender apenas de tipos primários e de Dp para parâmetros de pixel (I086f4, link em inglês).
  • As posições Int da linha de alinhamento retornadas de Placeable#get(AlignmentLine) agora não são nulas. Se a linha de alinhamento consultada estiver ausente, AlignmentLine.Unspecified será retornado (I896c5, b/158134875, links em inglês).
  • O AndroidView composto foi adicionado a um parâmetro modificador (I48a88, b/158746303, links em inglês).
  • Semantics() foi suspenso. Use Modifier.semantics() (I72407, b/158841414, links em inglês).
  • Adicione o viewModel() composto que permite criar ou usar o ViewModel já criado de forma semelhante a como ele funciona em Atividade ou Fragmento (I5fdd1, links em inglês).
  • O uso da classe Px foi substituído em várias classes de composição como parte do grande esforço de refatoração para depender apenas de tipos primários e de Dp para parâmetros de pixel (I97a5a, link em inglês).
  • TestTag está suspenso no momento. Use Modifier.testTag (If5110, b/157173105, links em inglês).
  • 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, link em inglês).
  • O ScaleFit suspenso anteriormente foi removido. Use ContentScale (Ifbc5b, link em inglês).
  • AdapterList foi renomeado como LazyColumnItems (6decc02, link em inglês).
  • LazyRowItems foi adicionado, análogo a rolagem horizontal de LazyColumnItems (Ibbcf7, link em inglês).
  • androidx.ui.foundation.shape.RectangleShape foi removido. Em vez disso, use androidx.ui.graphics.RectangleShape (I94939, b/154507984, links em inglês).
  • Modifier.zoomable foi adicionado para a funcionalidade de pinça ao aplicar zoom (Id5d63, link em inglês).
  • O componente Toggleable foi suspenso. Em vez disso, use Modifier.toggleable (I35220, b/157642842, links em inglês).
  • O uso de MutuallyExclusiveSetItem foi suspenso. Use Modifier.selectable (I02b47, b/157642842, links em inglês).
  • O parâmetro fontWeight foi adicionado ao Text, que não foi adicionado acidentalmente antes (I56937, link em inglês).
  • O parâmetro de porcentagem ao criar diretrizes de ConstraintLayout foi renomeado para fração (Ida2db, link em inglês).
  • Foi adicionada a compatibilidade com margens de barreiras de ConstraintLayout (I47ffe link em inglês).
  • A compatibilidade com RTL em ConstraintLayout foi corrigida. APIs sem reconhecimento de RTL foram adicionadas (I3b1c7, link em inglês).
  • Uma nova DSL para ConstraintLayout foi adicionada. Consulte as amostras para ver mais detalhes (Icaa9a, link em inglês).
  • A anotação @ExperimentalLayout foi adicionada. ConstraintLayout, FlowRow e FlowColumn agora são marcados com ela para sinalizar que as APIs serão alteradas (I412a8, link em inglês).
  • O Material Outlined Textfield foi adicionado (I1a518, link em inglês).
  • TabRow.TabPosition contém posição em Dp, não em IntPx (I34a07, b/158577776, links em inglês).
  • O uso de Modifier.ripple foi suspenso. Agora, o recurso de clique usa ondulação como indicação padrão (se você tiver um MaterialTheme {} definido no seu aplicativo). Assim, na maioria dos casos, você pode usar o recurso de clique e receber a indicação de ondulação gratuita. Se você precisar personalizar o parâmetro de cor / tamanho / delimitado para a ondulação, crie manualmente um RippleIndication e transmita-o para recurso de clique como o parâmetro de indicação (I101cd, b/155375067, links em inglês).
  • A API Scaffold foi reformulada: alguns parâmetros mudaram de nome e adicionaram novos parâmetros para melhorar a personalização. Um getter foi adicionado aos tamanhos de consulta de Fab, TopBar e BottomBar (I0e7ce, link em inglês).
  • Adiciona o parâmetro strokeWidth a CircularProgressIndicator para personalizar o tamanho do traço. Para alterar o tamanho do traço (altura) de um LinearProgressIndicator, use Modifier.preferredHeight() ou outro modificador de tamanho (Icea16, b/154919081, links em inglês).
  • relativeOffset(x, y) foi adicionado a GestureScope e PartialGestureScope, o que produz uma instância de deslocamento com valores relativos ao tamanho do componente. relativeOffset(.1f, .2f) significa um deslocamento em que x corresponde a 10% da largura do componente e y a 20% da altura do componente (Ia4bf7, b/158291007, links em inglês).
  • Ao injetar cliques duplos e longos, agora você pode especificar a duração desses gestos injetados (I51c97, b/155464717, links em inglês).
  • Foram adicionadas propriedades a GestureScope e PartialGestureScope para acessar coordenadas comuns de um componente. Eles são flutuantes para propriedades unidimensionais (como right) e deslocamentos para propriedades bidimensionais (como centerLeft).

    As propriedades unidimensionais são:

    • left
    • centerX
    • right
    • top
    • centerY
    • bottom

    As propriedades bidimensionais são: * topLeft * topCenter * topRight * centerLeft * center (já existente, mencionada para integridade) * centerRight * bottomLeft * bottomCenter * bottomRight

    Exemplo de uso:

    findByTag("widget")
        .doGesture {
            sendSwipe(topLeft, bottomRight)
        }
    

(I49ef3, b/158291007, links em inglês). - Adição de APIs de injeção de gestos multitoque para testar componentes ao realizar gestos multitoque.

Ao injetar um gesto, agora é possível especificar vários ponteiros fornecendo um ID de ponteiro para um método de gesto parcial. Se nenhum ID de ponteiro for especificado, o ponteiro 0 será usado, chamado de ponteiro padrão. Todos os gestos de prefab (sendClick, sendSwipe e todos os métodos criados com base neles) usam o ponteiro padrão. Os seguintes métodos em PartialGestureScope agora têm uma sobrecarga que aceita um ID de ponteiro: - sendDown - sendMoveTo - sendMoveBy - sendUp

Cada evento agora contém uma lista completa do local atual de cada ponteiro ativo (um ponteiro ativo que está inativo) e os métodos listados acima enviam um evento imediatamente. Além disso, três novos métodos foram introduzidos: - movePointerTo - movePointerBy - sendMove

Os métodos movePointerTo e movePointerBy alteram o local atual de um ponteiro, mas não enviam um evento para refletir isso. Consequentemente, também não avançam a hora atual do gesto. Isso permite mover vários ponteiros simultaneamente. O último método, sendMove, não aceita parâmetros e simplesmente envia um evento de movimento, permitindo "liberar" todo o movimento do ponteiro. Se os ponteiros tiverem sido atualizados com movePointerXx e um evento para baixo ou para cima for enviado, um evento de movimento será enviado imediatamente antes do evento para baixo ou para cima.

O tempo de todos os métodos também mudou um pouco. A partir de agora, sendDown e sendUp não avançarão mais o tempo do gesto. Portanto, é possível enviar vários ponteiros para baixo ou para cima simultaneamente. Todos os outros métodos avançam o tempo do gesto. No momento, não é possível, ainda, alterar o delta de tempo (I9acac, b/157142514, links em inglês). - Adição de AnnotatedString.getStringAnnotations que retorna todas as anotações dentro do intervalo (I1fa00, link em inglês).

Correções de bugs

  • Foram introduzidas estas APIs de animação sem estado de baixo nível (I63bf7, links em inglês).
  • 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, link em inglês).
  • 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, link em inglês).
  • 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, link em inglês).
  • Crossfade agora pode funcionar com nulo como valor inicial (Iad6a4, b/155947711, links em inglês).
  • 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, link em inglês).
  • androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue estão obsoletos. Os compostos TextField, FilledTextField e CoreTextField que usam esse tipo também estão obsoletos. Use androidx.ui.input.TextFieldValue (I4066d, b/155211005, 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 (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, links em inglês).
  • 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 de ponto flutuante separados para o raio ao longo dos eixos x e y (I46d1b, link em inglês).

  • O cursor do TextField tem uma animação intermitente (Id10a7, link em inglês).

  • Os gestos parciais não exigem mais a transmissão de um GestureToken (Id7ue5, link em inglês).

  • Correção de um bug de ConstraintLayout que causava uma falha nas recomposições (Ibee5a, b/158164341, links em inglês).

  • Correção de onClick que não era invocado para DropdownMenuItems (I3998b, b/157673259, links em inglês).

  • Alteração do nome do pacote para Locale e LocaleList de androidx.ui.text para androidx.ui.intl (I8132c, link em inglês).

Versão 0.1.0-dev13

10 de junho de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev13. A versão 0.1.0-dev13 contém essas confirmações (link em inglês).

Problemas conhecidos

  • Quando o aplicativo depende de androidx.core:core-ktx:1.2.0 e uma FontFamily com várias fontes / pesos de fonte é usada, a seleção de fontes é renderizada no peso normal da fonte. Trabalharemos nesse problema e, no momento, a solução alternativa é usar androidx.core:core-ktx:1.2.0-alpha01 ou androidx.core:core-ktx:1.1.0.

Versão 0.1.0-dev12

27 de maio de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev12. A versão 0.1.0-dev12 contém essas confirmações (link em inglês).

Mudanças na API

  • Inclusão da compatibilidade de animate() com Dp, Px, Size, Position, Bounds, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds, e AnimationVector (Ib7518, b/156559139, links em inglês)
  • O componente DropdownMenu foi adicionado ao ui-material, uma implementação do menu do Material Design (I9bb3d, b/135742486, links em inglês).
  • Remoção do LayoutTag() obsoleto. Use Modifier.tag() (If8044, b/157020665, b/156577646, links em inglês).
  • Remoção do obsoleto Modifier.matchParent(). Use Modifier.matchParentSize() (If8044, b/157020665, b/156577646, links em inglês).
  • 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, b/156681014, links em inglês)
  • O Modifier.semantics foi suspenso para permitir o uso de componentes de alto nível (I4cfdc, b/15198273, b/154023028, links em inglês).
  • DoubleTapGestureFilter agora desambigua SingleTapGestureFilter na árvore (If92b1, b/147609897, b/148553848, b/138605697, b/148464969, links em inglês).
  • Atualização da API de alinhamento, e adição de compatibilidade para alinhamento absoluto, que não espelha automaticamente no contexto RTL. (I38cd3, b/153633345, links em inglês)
  • VerticalScroller agora fornece o Column pronto para uso. HorizontalScroller agora fornece Row pronto para uso (Ieca5d, b/157020670, links em inglês).
  • Adição de Modifier.indication ao pacote básico. Use-o para mostrar as indicações de pressionar/arrastar/outros nos elementos personalizados interativos (I8425f, b/1528287131, links em inglês)
  • VerticalScroller e HorizontalScroller agora são compatíveis com rolagem reversa quando isReversed é definido em ScrollerPosition (I953bd, b/155852672, links em inglês).
  • Compatibilidade com a adição de compostos no layout de texto (I1373c, b/139320966, link em inglês).
  • Remoção da API DrawBackground obsoleta em favor das APIs de extensão drawBackground no modificador. Implementações de drawBackground de cores, pincéis e pintura refatoradas para reduzir os caminhos de código, bem como remover o requisito para que o modificador seja criado como parte da composição. (I0343a, b/155999867, links em inglês)
  • Adição de Modifier.padding(InnerPadding) (I94985, b/157133803, links em inglês).
  • Remoção de RowAlign obsoleto, ColumnAlign em Row e Column (If60d4, b/154524540, b/155858731, links em inglês).
  • Adição do modificador de layout offsetPx, que pode ser usado para definir deslocamentos (dinâmicos) em px (I5af57, b/154841615, links em inglês).
  • Permissão para mostrar/ocultar o teclado de software manualmente usando SoftwareKeyboardController (Ifb9d6, b/155427736, links em inglês).
  • Renomeação de Emphasis.emphasize() para Emphasis.applyEmphasis() (Iceebe, b/152874916, links em inglês).
  • Adição de um utilitário para simular o gesto de pinça em testes (If6c42, b/145593752, links em inglês).
  • Remoção da classe Size não utilizada porque há uma classe Size duplicada no módulo ui-geometry sendo consumida (I1b602, b/156546424, links em inglês).
  • AnnotatedString.Item foi renomeado como AnnotatedString.Range (I2d44d, b/156126205, links em inglês).
  • 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 em tempo de 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. 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 mudado para esperar uma Function3 em vez de Function1.
    7. restartableFunction e restartableFunctionN foram atualizadas para incluir parâmetros de tempo de compilação adicionais.

    (I60756, b/143464846, links em inglês)

A anotação @Model agora está obsoleta.

  • A anotação @Model agora está obsoleta. Use state e mutableStateOf como alternativas. Essa decisão de suspensão foi tomada após uma discussão cuidadosa.

    Motivo

    O motivo inclui, mas não se limita ao seguinte:

    • Reduz a área de superfície da API e os conceitos que precisamos ensinar.
    • Alinha-se melhor a outros kits de ferramentas comparáveis (Swift UI, React, Flutter).
    • Decisão reversível. Podemos trazer @Model de volta a qualquer momento.
    • Remove o uso de caso isolado e dificulta responder a perguntas sobre como configurar o @Model como coisas que precisamos lidar.
      • Classes de dados @Model, equals, hashcode etc.
      • Como faço para que algumas propriedades sejam "observadas" e outras não?
      • Como especificar a igualdade organizacional x referencial a ser usada na observação?
    • Reduz a "mágica" no sistema. Reduziria a probabilidade de alguém supor que o sistema era mais inteligente do que é (ou seja, saber diferenciar uma lista).
    • Torna a granularidade da observação mais intuitiva.
    • Aprimora a refatoração da propriedade "variável" na classe.
    • Abre potencialmente possibilidades para fazer otimizações específicas do estado.
    • Alinha-se melhor ao restante do ecossistema e reduz ambiguidades em relação a imutáveis ou a "adotar o estado mutável".

    Notas de migração

    Quase todos os usos existentes de @Model são facilmente transformados de duas maneiras. O exemplo abaixo tem uma classe @Model com duas propriedades apenas para fins de exemplo e sendo usada em um composto.

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    Alternativa 1: use State<OriginalClass> e crie cópias.

    Essa abordagem é facilitada com as classes de dados do Kotlin. Basicamente, transforme todas as propriedades var anteriores em propriedades val de uma classe de dados, use state em vez de remember e atribua o valor do estado a cópias clonadas do original usando o método de conveniência copy(...) da classe de dados.

    É importante observar que essa abordagem só funciona quando as únicas mutações para essa classe foram feitas no mesmo escopo em que a instância de State foi criada. Se a classe estiver se modificando internamente fora do escopo de uso e você estiver contando com a observação disso, a próxima abordagem será a que você deve usar.

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p = p.copy(x=it) }
       onYChange={ p = p.copy(y=it) }
     )
    }
    

    Alternativa 2: use mutableStateOf e delegados de propriedade.

    Essa abordagem é facilitada com os delegados de propriedade do Kotlin e a API mutableStateOf, que permite criar instâncias do MutableState fora da composição. Basicamente, substitua todas as propriedades var da classe original por var com mutableStateOf como delegado da propriedade. A vantagem é que não haverá mudança no uso da classe, apenas na implementação interna dela. No entanto, o comportamento não é completamente idêntico ao exemplo original, já que cada propriedade agora é observada/inscrita individualmente. Portanto, as recomposições que você vê após essa refatoração podem ser mais restritas (uma coisa boa).

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744, links em inglês)

Correções de bugs

  • Correção de um bug: quando o peso e o estilo da fonte são aninhados em uma AnnotatedString, o texto não é renderizado de maneira correta (I77a9d, b/155081453, links em inglês).
  • Implementações consolidadas ao CanvasScope para agora ser apenas DrawScope e ContentDrawScope
    • CanvasScope foi renomeado como DrawScope.
    • Atualização do DrawScope para implementar a interface de densidade e fornecer o LayoutDirection
    • Subclasse de DrawScope excluída no ContentDrawScope
    • O Painter e o PainterModifier foram atualizados para não manter mais uma propriedade RTL, porque o DrawScope já fornece isso sem ser manualmente (I1798e, b/155918846, links em inglês)
  • 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, b/156681014, links em inglês)

Versão 0.1.0-dev11

14 de maio de 2020

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

Mudanças na API

  • O Crossfade agora aceita o parâmetro opcional AnimationBuilder para permitir a configuração da animação (I6d6e0, link em inglês)
  • A API WithConstraints lambda final foi mudada. Agora, em vez de dois parâmetros, ele 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, links em inglês).
  • LayoutModifier2 foi renomeado como LayoutModifier (Id29f3, link em inglês).
  • A interface obsoleta LayoutModifier foi removida (Ia4d93, link em inglês).
  • HorizontalScroller e VerticalScroller agora restauram a posição de rolagem usando o estado da instância salva (Ia0fae, b/155075048, links em inglês).
  • Remoção de FocusManagerAmbient. Use FocusModifier.requestFocus para conseguir foco (Ic4826, link em inglês).
  • O layout da tabela foi removido temporariamente até ser possível disponibilizá-lo novamente com uma API atualizada (Id88a7, link em inglês).
  • Criação da API CanvasScope que envolve um objeto Canvas para expor uma 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 seu próprio stateobject do Paint para configurar operações de desenho.
    • Inclusão do CanvasScopeSample, bem como a atualização do app de demonstração para incluir uma demonstração gráfica declarativa (Ifd86d, link em inglês).
  • O ColoredRect foi removido. Em vez disso, use Box com o modificador drawBackground (I983c7, b/154753731, links em inglês).
  • Adição da personalização de cor do cursor ao TextField (I6e33f, link em inglês).
  • Agora é possível ocultar/mostrar o teclado do software usando SoftwareKeyboardController, que é entregue pelo retorno de chamada onTextInputStarted (I8dc44, b/151860051, links em inglês).
  • TextFieldValue usado com TextField agora pode ser usado para recuperar atividades recreativas quando usado da seguinte forma: var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() } (I5c3ce, b/155075724, links em inglês).
  • Adição de parâmetros usados com frequência a Text(). Se você estiver criando um estilo de texto local para transmitir um pequeno número destes parâmetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), poderá fornecer os parâmetros diretamente: Text(textAlign = TextAlign.Center) (I82768, link em inglês).
  • Substituição do parâmetro CoreTextField/TextField focusIdentifier por FocusNode para integração com o subsistema de foco (I7ea48, link em inglês).
  • Atualização de TextField: na dimensão horizontal, ocupará todo o espaço disponível concedido (IB08df, b/154638552, links em inglês).
  • O composto AlignmentLineOffset está obsoleto. Em vez disso, use o modificador relativePaddingFrom(). O composto CenterAlignmentLine removido (I60107, link em inglês).
  • Adição do modificador de layout defaultMinSizeConstraints, que define restrições de tamanho para o layout encapsulado apenas quando as restrições correspondentes recebidas não são especificadas (0 para restrições mínimas e infinito para restrições máximas) (I311ea, b/150460257, links em inglês).
  • O Container foi removido. Em vez disso, use Box (IBbc2b, b/15407926, links em inglês).
  • Remoção de modificadores LayoutWidth/Height/Size obsoletos (IB0bc1, link em inglês).
  • Adição de valores de parâmetro padrão para o modificador de deslocamento (I37f06, link em inglês).
  • Modificador de preenchimento simulado adicionado (I39840, b/152941819, links em inglês).
  • Remoção de modificador LayoutAspectRatio obsoleto (I65a74, link em inglês).
  • Correção de um bug nos modificadores de largura e altura que fazem o layout encapsulado ser medido sem restrições de eixo oposto (I210b8, b/154797971, links em inglês).
  • Os botões desativados agora seguem visualmente a especificação do Material Design (I47dcb, b/155076924, links em inglês).
  • FilledTextField recebe a ação IME (editor de método de entrada na sigla em inglês), transformação visual e compatibilidade de tipo de teclado (I1f9cf, b/155075201, links em inglês).
  • Adição do parâmetro strokeWidth a CircularProgressIndicator para personalizar o tamanho do traço. Para modificar o tamanho do traço (altura) de um LinearProgressIndicator, use Modifier.preferredHeight() ou outro modificador de tamanho (Icea16, b/154919081, links em inglês).
  • Adição da API de slot para ícones finais e principais no FilledTextField e no processamento do estado de erro (Ic12e0, link em inglês)
  • Adição da ação doPartialGesture com o receptor PartialGestureScope que tem os métodos sendDown, sendMoveTo, sendMoveBy, sendUp e sendCancel (I6b058, b/152477560, links em inglês).
  • Adição dos métodos sendDown, sendMove, sendUp e sendCancel a InputDispatcher e GestureToken para combinar estes eventos de toque individuais em um gesto (Ibd278, b/152477560, links em inglês).
  • Adição do operador mais para o estilo (texto/parágrafo/período) que delega para a função merge() (Ia1add, link em inglês).
  • Os projetos ui-framework e ui-platform foram mesclados em ui-core. Portanto, todas as dependências nesses módulos só precisam depender da IU do usuário (/I70067, link em inglês).

Correções de bugs

  • 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)
  • Remoção de modificadores LayoutAlign obsoletos (I10877, link em inglês)
  • Adição de Toolbar para operações relacionadas a texto (I49d53, link em inglês)

Versão 0.1.0-dev10

29 de Abril de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev10. A versão 01.0-dev10 contém essas confirmações.

Mudanças na API

  • Todos os usos anuláveis de Color na API foram substituídos por não anuláveis e usam Color.Unset em vez de null (Iabaa7)
  • As funções de medições intrínsecas em Layout e LayoutModifier2 agora têm um receptor IntrinsicMeasureScope que fornece API de consulta intrínseca com direção de layout propagada implicitamente. (Id9945)
  • Os filhos Layout e LayoutModifier podem ser medidos com uma direção de layout diferente. (Ibd731)
  • O novo Modifier.zIndex() foi adicionado para controlar a ordem de desenho dos filhos no mesmo layout pai. propriedade de elevação em DrawLayerModifier foi renomeada para shadowElevation e não controla mais a ordem de desenho. A ordem dos parâmetros de DrawShadow foi modificada: o primeiro parâmetro agora é o elevation e o segundo parâmetro agora é o shape, com um padrão RectangleShape (I20150, b/152417501).
  • onSizeChange e onPositionChange removidos em Owner (I5c718).
  • Adição de Constraints2, uma cópia de Constraints que só aceita valores de restrições 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).
  • Adição de InteractionState e Interaction, facilitando a criação de componentes que reagem a mudanças de estado da IU, como pressionar e arrastar (Icfe25, b/152525426).
  • RectangleShape foi movido de androidx.ui.foundation.shape.* para androidx.ui.graphics.* (Ia74d5, b/154507984).
  • Atualização da API TextField: os callbacks onFocus e onBlur foram mesclados em um único callback onFocusChange(Boolean) com um parâmetro booleano (I66cd3)
  • O FontLoader foi removido. Use fontResource (Id0308).
  • 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).
  • Adição de "Não definido" Color para representar um valor não definido sem a opção "Cores" (If901a).
  • Adição de métodos de extensão Canvas.rotate e Canvas.scale para consumir coordenadas dinâmicas opcionais para transformações. Esse é o padrão no canto superior esquerdo da atual tela de tradução.
    • Canvas.rotateRad também foi movido para ser um método de extensão de consistência (Ibaca6)
  • A cor padrão da FAB e da FAB estendida foi modificada para MaterialTheme.colors.secondary (I3b9b9, b/154118816, em inglês).
  • Não é mais necessário chamar onIdle() explicitamente após ComposeTestRule.setContent {} (Iafb2e, b/154079800, em inglês).
  • Agora você pode passar um ActivityTestRule personalizado para AndroidComposeTestRule (I38206, b/153623653, em inglês).
  • Adição de getLineStart, getLineEnd, getEllipsisOffset e getEllipsisCount a TextLayoutResult (Ibc801)
  • 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).

Correções de bugs

  • Apresente o parâmetro opcional rect adicional a ImagePainter para permitir o desenho de uma subseção de ImageAsset subjacente (I0ea9e)
  • Correção de uma falha em AdapterList ao remover itens. (Ic64b0, b/153195921, em inglês)
  • Agora é necessário usar ComposeTestRule para que qualquer Finder (como o findByTag) funcione (I75bb9, b/153565271, em inglês)

Versão 0.1.0-dev09

15 de abril de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev09. A versão 0.1.0-dev9 contém essas confirmações (link em inglês).

Mudanças na API

  • Alignment se tornou instanciável com valores arbitrários. Adição de Alignments 1D (Ia0c05, link em inglês)
  • alignToSiblings now accepts a agora aceita um Measured em vez de um instead of Placeable. (I5788d, link em inglês)
  • (I45f09, b/152842521, em inglês)
    • ScaleFit renomeado como ContentScale
    • ContentScale foi movido do ui-graphics para o ui-core para ficar no mesmo módulo que a API Alignment.
    • FillMaxDimension renomeado como Crop
    • FillMinDimension renomeado como Fit
    • Fit renomeado como Inside para melhor correspondência de ImageView.ScaleType equivalentes
    • Adição da documentação que indica que a combinação de Crop e Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_CROP, e Fit usado com Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.FIT_CENTER
    • Inside usado com Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_INSIDE
  • Adição da compatibilidade com Rtl para modificadores de desenho. (I0aaf9, link em inglês)
  • Lançamento da API para aumentar o Android Views a partir do XML. Consulte a demonstração do ViewInCompose para ver mais detalhes. (I42916, link em inglês)
  • Adição de positionInParent e boundsInParent a LayoutCoordinates. (Icacdd, b/152735784, links em inglês)
  • DrawLayerModifier e drawLayer() agora padronizam clipToBounds e clipToOutline como false. (I0eb8b, b/152810850, link em inglês)
  • LayoutResult foi renomeado como MeasureResult. (Id8c68, link em inglês)
  • Adição de LayoutModifier2, uma nova API para definir modificadores de layout. LayoutModifier obsoleto (If32ac, link em inglês)
  • Remoção de ProvideContentColor. Basta usar ContentColorAmbient diretamente com Providers (Iee942, link em inglês)
  • Adição de um parâmetro de cor ao texto, permitindo modificar a cor do estilo do texto sem precisar unificá-lo manualmente ao estilo fornecido em um tema. (I7112a, link em inglês)
  • O sistema de temas de forma é atualizado de acordo com a especificação do Material Design. Agora você pode oferecer formas pequenas, médias e grandes para serem usadas pela maior parte dos componentes (Ifb4d1, link em inglês)
  • LayoutDirectionAmbient está obsoleto. Para ler a direção do layout definida pela localidade, use localeLayoutDirection no ConfigurationAmbient (I851b1, link em inglês)
  • O novo LifecycleOwnerAmbient está disponível. Agora uma Activity usada com a IU do Compose precisa ampliar androidx.activity.ComponentActivity (ou AppCompatActivity). O setContent na android.app.Activity está obsoleto (Idb25a, b/153141084, links em inglês)
  • Compatibilidade com pop-up RTL (IB6657, link em inglês)
  • Adição de ClipboardManager. (I1dd2b, link em inglês)
  • Adição da compatibilidade com a personalização de dimensões de filhos do ConstraintLayout (Idb1a5, link em inglês)
  • O OnChildPositioned foi removido. Em vez dele, os desenvolvedores precisam usar o modificador Modifier.onChildPositioned. (I5ade7, b/151141173, b/151641453, b/151818355, links em inglês)
  • toFrameworkRect/toFrameworkRectF foi renomeado como toAndroidRect/toAndroidRectF para corresponder à convenção de nomenclatura das conversões de objeto 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, link em inglês)
  • EdgeInsets foi renomeado como InnerPadding. O parâmetro innerPadding de botões do Material Design foi renomeado como paddding. (I66165, link em inglês)
  • Adição de modificadores para o dimensionamento de medidas intrínsecas e suspensão do uso dos componentes que realizavam essa tarefa (I8295d, link em inglês)
  • Remoção dos compostos Wrap e Center obsoletos. (I29e23, link em inglês)
  • O controle deslizante agora não tem estado. Os usuários precisarão transmitir e atualizar o estado por conta própria, assim como em qualquer outro controle (Ia00aa, link em inglês).
  • StaticDrawer foi removido. Se precisar desse componente, use Box com uma largura especificada (I244a7, link em inglês)
  • Adição do parâmetro de modificador ao ListItem e reordenação dos parâmetros para promover o corpo do lambda final (I66e21)
  • Adição do parâmetro de construtor defaultFontFamily a Typography, permitindo especificar a família de fontes padrão que será usada para qualquer TextStyles para o qual uma família não tenha sido definida. (I89d07, link em inglês)
  • Material Data Tables temporariamente removido da plataforma da API (Iaea61, link em inglês).
  • Os parâmetros no composto Divider foram renomeados (Ic4373, link em inglês)
  • O parâmetro à direita de "children" foi renomeado em muitos componentes do Material Design. Se você o usava por meio de parâmetros nomeados, use o novo nome ou use apenas a sintaxe de lambda final (Ia6d19, link em inglês)
  • MaterialTheme.emphasisLevels foi removido. Use EmphasisAmbient.current para recuperar os níveis de ênfase (Ib5e40, link em inglês)
  • savedInstanceState() agora pode ser usado com tipos anuláveis (I6847f, b/153532190, links em inglês)
  • Adição de ui-rxjava2: novo artefato com adaptadores para RxJava2. (Ifab4b, b/153369097, links em inglês)

    • Exemplo do uso:
    val value by observable.subscribeAsState()
    
  • Adição de ui-livedata: novo artefato com um adaptador para LiveData. (Ie9e8c, b/150465596, links em inglês)

    • Exemplo do uso:
    val value by liveData.observeAsState()
    

Correções de bugs

  • Adição dos parâmetros verticalGravity e horizontalGravity a Row e Column, respectivamente. (I7dc5a, link em inglês)
  • ui-text module was renamed asui-text-core` (I57dec, link em inglês)
  • Aprimoramento da API DrawModifier (Ibaced, b/152919067, em inglês):
    • Definição do escopo do receptor de draw() como ContentDrawScope
    • Remoção de todos os parâmetros em draw()
    • DrawScope tem a mesma interface do antigo CanvasScope
    • ContentDrawScope tem o método drawContent()
  • runOnIdleCompose e runOnUiThread agora são funções globais, e não métodos em ComposeTestRule. (Icbe8f, link em inglês)
  • [Mutável] Operadores para delegação de propriedade de estado foram movidos para extensões compatíveis com otimizações de delegação de propriedade do Kotlin 1.4. Os autores da chamada precisam adicionar importações para continuar usando by state { ... } ou by mutableStateOf(...). (I22c16, link em inglês)
  • ColoredRect está obsoleto. Use Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731, link em inglês)
  • Mudamos a forma como medimos o primeiro layout colocado no bloco activity.setContent { }. Antes, ele era forçado a preencher toda a tela da atividade. Agora, ele se comporta como se você colocasse o layout dentro de uma pilha: ele pode ser menor que uma tela e será posicionado no canto superior esquerdo. Caso prefira o comportamento antigo, é possível aplicar Modifier.fillMaxSize() para seu layout (Ie88a7, b/15453714, links em inglês)
  • O módulo ui-text-compose foi renomeado como ui-text. ui-text agora contém os compostos CoreText e CoreTextField (IB7d47, link em inglês)
  • Os compostos ui-framework/CoreText, CoreTextField foram movidos para ui-text-compose. É recomendável incluir ui-text-compose no seu projeto. (I32042, link em inglês)
  • wrapContentWidth e wrapContentHeight foram atualizados para esperar um Alignment vertical ou horizontal em vez de qualquer Alignment. O modificador de gravidade foi atualizado para aceitar Alignment vertical ou horizontal. Row, Column e Stack foram atualizadas para ter compatibilidade com Alignments contínuos personalizados. (I7731b, link em inglês)
  • Criação da API PixelMap para oferecer compatibilidade com consultas de informações de pixel de um ImageAsset. (Ia4d93, link em inglês)
  • Adição da implementação do Material Design do campo de texto preenchido (Ic75cd, link em inglês)
  • O nome de pacote ui-android-text (androidx.text) foi substituído por androidx.ui.text.platform para estar alinhado à política androidx. (I42711, link em inglês)

Versão 0.1.0-dev08

1º de abril de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev08. A versão 0.1.0-dev08 contém essas confirmações (link em inglês).

Mudanças na API

  • Adição de propriedades translationX/Y para oferecer compatibilidade com o ajuste da lista de exibição para comandos de desenho de uma determinada camada. Isso é útil para mover conteúdos em resposta a animações ou eventos de toque. (I22c16, link em inglês)
  • Adição de parâmetros pivotX, pivotY às APIs Layer para oferecer compatibilidade com a rotação e o dimensionamento em torno de um determinado ponto em uma camada (Icf7c3, link em inglês)
  • O arrastável foi movido para o modificador (Id9b16, b/151959544, links em inglês)
  • Text foi movido de androidx.ui.core para o pacote androidx.ui.foundation. (I87ce5, link em inglês)
  • Adição do parâmetro enabled a Checkbox, Switch and Toggleable (I41c16, link em inglês)
  • O Ripple agora é um modificador. Embora Clickable ainda não tenha sido convertido, o uso recomendado é Clickable(onClick = { ... }, modifier = ripple()) (Ie5200, b/151331852, b/1.50060763, links em inglês)
  • 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.
    • Os compostos DrawVector estão obsoletos. Use VectorPainter.
    • A API Image(Painter) foi renomeada como PaintBox(Painter)
    • Criação do composto Vector que se comporta como Image, mas com um VectorAsset em vez de um ImageAsset (I9af9a, b/149030271, links em inglês)
  • O composto ParentData está obsoleto. Caso você precise apenas marcar os filhos do layout para reconhecê-los dentro do bloco de medida, crie um modificador que implemente a interface ParentDataModifier ou use o modificador LayoutTag. (I51368, b/150953183, links em inglês)
  • OnPositioned foi removido para dar preferência ao uso do modificador onPositioned (I2ea3c, link em inglês)
  • Os membros RowScope e ColumnScope agora podem ser acessados fora de Row e Column. (I7112a, link em inglês)
  • Container está obsoleto. Use Box. (I675ce, b/15407926, links em inglês)
  • As APIs FloatingActionButton foram refatoradas para aceitar lambdas compostos em vez de primitivos. Veja amostras atualizadas para informações de uso. (I00622, link em inglês)
  • Novas funções: savedInstanceState() e rememberSavedInstanceState(). Elas são semelhantes a state() e remember(), mas têm a compatibilidade integrada com estados de instância (If1987, b/152025209, links em inglês)

Correções de bugs

  • Substituição de modificador mais operador por funções de extensão de fábrica (I225e4, link em inglês)
  • O composto Center está obsoleto. Ele precisa ser substituído pelo modificador LayoutSize.Fill + LayoutAlign.Center ou por um dos compostos Box ou Stack com modificadores adequados aplicados (Idf5e0, link em inglês)
  • Mudança das APIs MaterialTheme, como MaterialTheme.colors(), MaterialTheme.typography(), passando de funções a propriedades. Remoção dos parênteses das chamadas existentes. Nenhuma mudança de comportamento é esperada. (I7112a, link em inglês)

Versão 0.1.0-dev07

18 de março de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev07. A versão 0.1.0-dev07 contém essas confirmações (link em inglês).

Mudanças na API

  • Adições de API ao ManualAnimationClock: hasObservers: Boolean e dispatchOnSubscribe: Boolean de parâmetro construtor (Iaa134, link em inglês)
  • Adição de OnPositionedModifier e OnChildPositionedModifier para substituir as funções compostas OnPositioned e OnChildPositioned. (I2ec8f, link em inglês)
  • Adição de LayerModifier, um modificador que permite adicionar um RenderNode para um Layout. Ele permite definir o recorte, a opacidade, a rotação, o dimensionamento e as sombras. Isso substituirá 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, link em inglês)
  • Criação do composto Image para processar dimensionamento/layout, além de desenhar um determinado ImageAsset na tela. Esse composto também pode ser usado para desenhar qualquer instância arbitrária do Painter que respeite o tamanho intrínseco dele e ofereça compatibilidade com um determinado tamanho fixo ou mínimo (IBcc8f, link em inglês)
  • 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. (Id5bbd, link em inglês)
  • Criação do método de extensão 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, link em inglês)
  • androidx.compose.ViewComposer foi movido para androidx.ui.node.UiComposer, e androidx.compose.Compose.subcomposeInto foi movido para androidx.ui.core.subcomposeInto (Idef00, link em inglês)
  • Remoção da função Layout Composable que aceita varargs de filhos. (Iff757, link em inglês)
  • WithConstraints recebeu o parâmetro LayoutDirection (I6d6f7, link em inglês)
  • Adição do modificador LayoutOffset para ajustar a posição do layout (I0b8a3, link em inglês)
  • Surface e Card foram movidos de androidx.ui.material.surface para androidx.ui.material (I88a6d, b/150863888, links em inglês)

Correções de bugs

  • O LayoutFlexible foi renomeado como LayoutWight. O parâmetro restrito foi renomeado como preenchimento (I5977f, link em inglês)
  • A função do composto Opacity foi substituída pelo modificador drawOpacity. (I5fb62, link em inglês)
  • Agora, os testes que usam AndroidComposeTestRule oferecem um relógio de animação na raiz da composição que permite que ele seja pausado, retomado e avançado manualmente. (Id54c5, link em inglês)
  • 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, link em inglês)
  • O DrawVector passou de uma função composta comum para retornar um modificador drawVector() que desenhará o vetor como o plano de fundo de um layout. (I7b8e0, link em inglês)
  • Substituição do Clip de função composta pelo modificador drawClip(). DrawClipToBounds é um modificador conveniente a ser usado quando você só precisa cortar os limites da camada com uma forma retangular. (If28eb, link em inglês)
  • Substituição da função composta DrawShadow pelo modificador drawShadow(). As sombras agora são desenhadas como parte do LayerModifier. (I7112a, link em inglês)
  • O composto Wrap está obsoleto. Ele pode ser substituído pelo modificador LayoutAlign ou pelo composto Stack (IB237f, link em inglês).
  • Painter.toModifier foi renomeado como Painter.asModifier, já que o modificador recém-criado tem uma referência ao Painter original que pode ser compartilhada entre várias instâncias do modificador (I7195b, link em inglês).
  • O padding negativo no LayoutPadding não é mais permitido. Em vez disso, use o LayoutOffset para ajustes de posições negativas. (Ifb5b1, link em inglês)

Versão 0.1.0-dev06

4 de março de 2020

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

Mudanças na API

  • O componente Stack é compatível com a direcionalidade da direita para a esquerda (Ic9e00, link em inglês).
  • Compatibilidade inicial com o layout RTL no Compose (Ia5519, link em inglês)
  • Adição de Icon, IconButton and IconToggleButton e remoção de AppBarIcon. Você pode substituir diretamente os usos existentes do AppBarIcon pelo iconButton. Agora, eles terão a área de toque correta. Consulte as amostras para ver informações de uso. Veja também os ícones do material fornecidos que podem ser usados diretamente com esses componentes. (I96849, link em inglês)
  • Remoção da API Snackbar com parâmetros String a favor do uso da sobrecarga que aceita lambdas compostos. Consulte amostras atualizadas para ver informações de uso (I55f80)
  • As APIs Tab foram refatoradas para aceitar lambdas text e icon (Ia057e, link em inglês).
  • Adição do componente BottomNavigation. Consulte os documentos e as amostras para ver informações de uso (I731a0)
  • Adição da compatibilidade com a função de chamar ações semânticas personalizadas. (I22c16, link em inglês)

Correções de bugs

  • Compatibilidade com a direção da direita para a esquerda no modificador LayoutPadding (I9e8da, link em inglês)

Versão 0.1.0-dev05

19 de fevereiro de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev05. A versão 01.0-dev05 contém essas confirmações (link em inglês).

Mudanças na API

  • Adição da API Painter. Crição da API para desenhos abstratos de conteúdo em uma região específica. O comportamento dessa API é semelhante ao das APIs Drawable. Contudo, ela fornece uma plataforma de API mais simplificada. Além disso, há implementações genéricas para aplicar vários efeitos, como Alfa, e aplicar ColorFilters para implementações de desenho arbitrárias, com a possibilidade das próprias implementações oferecerem uma compatibilidade mais otimizada para essas instalações. (aosp/1214802, link em inglês)
  • Alterações interruptivas na API de ambientes. Consulte o registro e a documentação do Ambient<T> para ver detalhes (I4c7ee, b/143769776, links em inglês)
  • Mudanças do LayoutCoordinates para fazer com que providedAlignmentLines seja um grupo em vez de um mapa 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. (I7112a, link em inglês)
  • LayoutGoordinates não tem mais uma propriedade de posição. A propriedade position não faz sentido ao considerar LayoutModifiers, rotação ou dimensionamento. Em vez disso, os desenvolvedores usarão parentCoordinates e childToLocal() para calcular a transformação de um LayoutCoordinate em outro.
  • LayoutCoordinates usa IntPxSize para a propriedade de tamanho em vez de "PxSize". Os layouts usam tamanhos de pixel com números inteiros. Portanto, todos os tamanhos de layout precisam usar números inteiros, e não valores de pontos flutuantes. (I7731b, link em inglês)
  • 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, link em inglês)
  • Adição de compatibilidade inicial com a incorporação do Android Views no Compose. Veja a demonstração do ViewInCompose.kt para saber mais detalhes. (I6d1ce, link em inglês)
  • Atualização do LayoutAlign para não preencher mais o espaço disponível (I2b14f, link em inglês)
  • Adição dos módulos androidx.ui:ui-material-icons-core e androidx.ui:ui-material-icons-extended. Você pode depender de androidx.ui:ui-material-icons-extended para poder usar diretamente todos os ícones do material (material.io/icons, link e inglês) pelo Compose. Um pequeno subconjunto (que será expandido no futuro), incluindo os ícones mais usados, será incluído diretamente como parte da biblioteca principal de material de IU. Portanto, não será necessário adicionar essa grande dependência para usar ícones como o Menu. Consulte a documentação do androidx.ui.material.icons.Icons e as amostras vinculadas para saber mais informações.
  • Remoção do composto AspectRatio em favor do modificador. Os compostos FlexColumn, FlexRow e o modificador do Spacing obsoletos foram excluídos (Iec8a7)
  • O ButtonStyle foi substituído por funções distintas, e a sobrecarga de texto (string) foi removida. Consulte amostras do Button atualizadas para ver informações de uso. (If63ab, b/146478620, b/146482131, links em inglês)

Correções de bugs

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

Problemas conhecidos

  • Mudanças nas propriedades semânticas de um componente fazem incorretamente que todo o estado nos filhos seja perdido. Isso causa falhas nas animações e em tudo o que dependa do estado ser persistido nas recomposições. Considerando que no momento lambdas não podem ser comparados, isso inclui todos os componentes que definem uma ação semântica usando um lambda diferente de remember, como Scroller. Isso será corrigido na próxima versão. (b/148606417, link em inglês)

Versão 0.1.0-dev04

29 de janeiro de 2020

Lançamento do androidx.ui:ui-*:0.1.0-dev04. As confirmações incluídas nessa versão podem ser encontradas clicando aqui (link em inglês).

Mudanças na API

  • IDs de ponteiro universalmente exclusivos (I42cde, todos os links desta lista estão em inglês)
  • Integração do nó semântico (aosp/1138236)
  • Melhorias na superfície da API de Constraints (I0fd15)
  • Refatoração de PathParser e PathNode/PathCommand (I715ae)
  • Atualização da superfície da API de DpConstraints (I712a0)
  • Adição de compatibilidade com modificadores que implementam várias interfaces (I22c16)
  • Implementação de cancelamento do restante dos detectores de gestos (I349f4)
  • Adição de Color.compositeOver() a Color (I5379d)
  • Remoção de algumas classes desnecessárias para androidx.ui:ui-core: ImageByteFormat, ImageRepeat, Matrix2 (I45e6b)
  • Ativação da compilação incremental do Kotlin em projetos Compose (b/144304390)
  • Concatenação de modificadores com + (Ic33d3)
  • Adição de modificador LayoutTag (I69fe4)
  • Adição de atributos ParagraphStyle a TextStyle (If0d40)
  • Adição de DrawModifier, um tipo modificador que pode desenhar na superfície do layout modificado. (I5fa56)
  • Mudança do armazenamento para que a posição do modificador seja relativa (I5977f)
  • Adição de API de testes para realização de deslizes em elementos (I9125a)
  • Adição de componente Box para combinar layouts e desenhar funcionalidades comuns (I6e2a7)
  • Agora, os controles de rolagem têm o comportamento do movimento de arremesso nativo do Android (b/147493715)
  • Substituição de DrawBorder pelo Border Modifier (Id335a)
  • Melhoria na detecção de gestos do controle de rolagem (I87d36)
  • Adição de metadados contentColor à base (Icd074)
  • Adição do componente material Scaffold. O Scaffold implementa a estrutura visual do layout com Material Design básico (I7731b)
  • Uso do novo parâmetro de superfície contentColor nos botões (b/146210556)
  • Remoção de textStyle.withOpacity() (I8cc9a)
  • Adição do subsistema Emphasis (Ife95c)
  • FloatingActionButtonKtAgora, as propriedades de FABs são particulares (I9c121)
  • Implementação das primeiras iterações de um Snackbar (If1c08)
  • Adição de compatibilidade inicial com um tema escuro (I6323a)
  • Adição de tamanho, centro e localToGlobal a GestureScope (I1ea37)
  • Adição de API para injeção do gesto de clique duplo (I44902)
  • Adição de sendLongClick methods a GestureScope (Ic7db9)
  • Conversão (x, y) para PxPosition na injeção de gestos (Ifefa4)
  • Adição de velocidade desejada ao gesto injetado (I3b9df)
  • Adição de captura de bitmaps à API de teste Compose (androidx.ui:ui-test). (I4e36c)
  • Transferência de doClick para GestureScope (I56211)
  • Adição de findBySubstring e filtros correspondentes a FindersKt. (Ief0b9)
  • Refatoração de seleção de texto delimitada a 1 caractere (Iff757)
  • Remoção de TextSpan (Iebece)
  • Remoção de classes Composition em favor da classe básica do Composer (Ieadbf)
  • Mudança do vetor defaultWidth/defaultHeight para uso de Dp (Iad267)
  • Geração correta de grupos em torno das chamadas in-line que podem ser compostas (Ibf739)
  • Ativação de prototipagem de sinalização nos detectores de gestos (I4b7b0)
  • Mudança dos argumentos maxLines e ellipsis de anulável a não nulo (I46dac)
  • Agora, AnnotatedString usa SpanStyle (Ib6d3e)
  • Adição de compatibilidade de modificadores com WithConstraints (b/145399789)
  • Passagem de estilo de parágrafo para TextDelegate (Id2d4a)
  • Adição de classe SpanStyle (Ifdb4f)
  • Uso do valor padrão em vez do Float anulável em TextGeometricTransform (I1bf00)
  • Adição de PreviewActivity a androidx.ui:ui-tooling (Ic8988)
  • Agora, ModelObserver tem uma única linha de execução (b/146144712)
  • Adição de comparativo de mercado a ModelObserver (Ia176b)
  • Remoção de callbacks para cancelamento de chamada quando PointerInputNode é removido da árvore (I7112a)
  • Remoção do modificador LayoutInflexible de linha e coluna (I0d820)
  • Derivação dos modificadores de layout de ParentDataModifier (I49b6a)
  • Adição do modificador Wrapped (I6f8df)
  • Adição dos modificadores Aligned (Ifc581)
  • Adição de layout restrito ao Compose (I175ad)

Refatorações

  • Transferência de gráficos de androidx.ui:ui-core para androidx.ui:ui-graphics (Ic17b0)
  • Mudança de módulo e pacote de Dp, IntPx etc. para androidx.ui:ui-unit e androidx.ui:ui-util (I45fe4)
  • Refatoração de efeitos para @Composable (Ie2686)