IU
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.
Grupo | Descrição |
---|---|
compose.animation | Crie animações nos aplicativos Jetpack Compose para enriquecer a experiência do usuário. |
compose.compiler | Transforme funções @Composable e ative otimizações com um plug-in do compilador Kotlin. |
compose.foundation | Crie 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.material | Crie 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.runtime | Elementos 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.ui | Componentes fundamentais da IU do Compose necessários para interagir com o dispositivo, incluindo layout, desenho e entrada. |
iu | Funciona 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
eAndroidInputDispatcher
foram movidos deandroidx.ui.test.android
paraandroidx.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 derunBlocking
ao executar testes que precisam de um ManualFrameClock eTestUiDispatcher.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 umClass<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 comoPlacementScope.place()
, e oPlacementScope.place()
anterior foi renomeado comoPlacementScope.placeRelative()
. Por essa razão, o métodoPlacementScope.place()
não espelhará de forma automática a posição em contextos da direita para a esquerda. Se você quiser o espelhamento, usePlacementScope.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 pararemember { 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ãoby 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
. UseSemanticsNodeInteraction.performGesture
(Id9b62). - Renomeação de
SemanticsNodeInteraction.getBoundsInRoot()
comoSemanticsNodeInteraction.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
eColumn
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 comorunOnIdle
(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()
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 porInt
.IntPxPosition
foi substituído porIntOffset
.IntPxSize
foi substituído porIntSize
(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 dePxSize
. 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 dePxPosition
. 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. UseModifier.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. UseModifier.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. UseContentScale
(Ifbc5b, link em inglês). AdapterList
foi renomeado comoLazyColumnItems
(6decc02, link em inglês).LazyRowItems
foi adicionado, análogo a rolagem horizontal deLazyColumnItems
(Ibbcf7, link em inglês).androidx.ui.foundation.shape.RectangleShape
foi removido. Em vez disso, useandroidx.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, useModifier.toggleable
(I35220, b/157642842, links em inglês). - O uso de
MutuallyExclusiveSetItem
foi suspenso. UseModifier.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 aGestureScope
ePartialGestureScope
, 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 (comocenterLeft
).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
eandroidx.ui.input.EditorValue
estão obsoletos. Os compostosTextField
,FilledTextField
eCoreTextField
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 paraDropdownMenuItem
s (I3998b, b/157673259, links em inglês).Alteração do nome do pacote para
Locale
eLocaleList
deandroidx.ui.text
paraandroidx.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 é usarandroidx.core:core-ktx:1.2.0-alpha01
ouandroidx.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()
comDp
,Px
,Size
,Position
,Bounds
,PxPosition
,PxSize
,PxBounds
,IntPx
,IntPxSize
,IntPxPosition
,IntPxBounds
, eAnimationVector
(Ib7518, b/156559139, links em inglês) - O componente
DropdownMenu
foi adicionado aoui-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()
. UseModifier.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 desambiguaSingleTapGestureFilter
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 forneceRow
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
eHorizontalScroller
agora são compatíveis com rolagem reversa quandoisReversed
é definido emScrollerPosition
(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()
paraEmphasis.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 classeSize
duplicada no móduloui-geometry
sendo consumida (I1b602, b/156546424, links em inglês). AnnotatedString.Item
foi renomeado comoAnnotatedString.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:
- Algumas chamadas serão ignoradas.
- As expressões compostas em expressões de argumento padrão agora são corretamente inscritas e processadas.
Esse trabalho incluiu algumas otimizações:
- 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.
- 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.
- 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.
- 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:
Composer::startExpr
foi removido.Composer::endExpr
foi removido.Composer::call
foi suspenso.- As sobrecargas que não são varargs de
key
foram removidas. Use a versãovararg
daqui em diante. - A anotação Pivotal foi suspensa. Use
key
como substituto. - ScopeUpdateScope::updateScope foi mudado para esperar uma Function3 em vez de Function1.
- 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. Usestate
emutableStateOf
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?
- Classes de dados
- 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 propriedadesval
de uma classe de dados, usestate
em vez deremember
e atribua o valor do estado a cópias clonadas do original usando o método de conveniênciacopy(...)
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 propriedadesvar
da classe original porvar
commutableStateOf
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
emaxHeight
no Dp (I91b9a, b/149979702, links em inglês). LayoutModifier2
foi renomeado comoLayoutModifier
(Id29f3, link em inglês).- A interface obsoleta
LayoutModifier
foi removida (Ia4d93, link em inglês). HorizontalScroller
eVerticalScroller
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
. UseFocusModifier.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, useBox
com o modificadordrawBackground
(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 chamadaonTextInputStarted
(I8dc44, b/151860051, links em inglês). TextFieldValue
usado comTextField
agora pode ser usado para recuperar atividades recreativas quando usado da seguinte forma: var text bysavedInstanceState(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, comoText(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
porFocusNode
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, useBox
(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
aCircularProgressIndicator
para personalizar o tamanho do traço. Para modificar o tamanho do traço (altura) de umLinearProgressIndicator
, useModifier.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étodossendDown
,sendMoveTo
,sendMoveBy
,sendUp
esendCancel
(I6b058, b/152477560, links em inglês). - Adição dos métodos
sendDown
,sendMove
,sendUp
esendCancel
aInputDispatcher
eGestureToken
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
eui-platform
foram mesclados emui-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 usamColor.Unset
em vez denull
(Iabaa7) - As funções de medições intrínsecas em
Layout
eLayoutModifier2
agora têm um receptorIntrinsicMeasureScope
que fornece API de consulta intrínseca com direção de layout propagada implicitamente. (Id9945) - Os filhos
Layout
eLayoutModifier
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 emDrawLayerModifier
foi renomeada parashadowElevation
e não controla mais a ordem de desenho. A ordem dos parâmetros deDrawShadow
foi modificada: o primeiro parâmetro agora é oelevation
e o segundo parâmetro agora é oshape
, com um padrãoRectangleShape
(I20150, b/152417501). onSizeChange
eonPositionChange
removidos emOwner
(I5c718).- Adição de
Constraints2
, uma cópia deConstraints
que só aceita valores de restriçõesInt
em vez deIntPx
.IntPx
será removido e todas as restrições inteiras serão consideradas pixels como o Android.- Adição de
IntSize
também, que acabará substituindoIntPxSize
(I4b43a).
- Adição de
- Adição de
InteractionState
eInteraction
, 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 deandroidx.ui.foundation.shape.*
paraandroidx.ui.graphics.*
(Ia74d5, b/154507984).- Atualização da API
TextField
: os callbacksonFocus
eonBlur
foram mesclados em um único callbackonFocusChange(Boolean)
com um parâmetro booleano (I66cd3) - O
FontLoader
foi removido. UsefontResource
(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
eCanvas.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ósComposeTestRule.setContent {}
(Iafb2e, b/154079800, em inglês). - Agora você pode passar um
ActivityTestRule
personalizado paraAndroidComposeTestRule
(I38206, b/153623653, em inglês). - Adição de
getLineStart
,getLineEnd
,getEllipsisOffset
egetEllipsisCount
aTextLayoutResult
(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 deImageAsset
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 uminstead of
Placeable. (I5788d, link em inglês)- (I45f09, b/152842521, em inglês)
ScaleFit
renomeado comoContentScale
ContentScale
foi movido doui-graphics
para oui-core
para ficar no mesmo módulo que a API Alignment.FillMaxDimension
renomeado comoCrop
FillMinDimension
renomeado comoFit
Fit
renomeado comoInside
para melhor correspondência deImageView.ScaleType
equivalentes- Adição da documentação que indica que a combinação de
Crop
eAlignment.Center
alcança o mesmo resultado queImageView.ScaleType.CENTER_CROP
, eFit
usado comAlignment.Center
alcança o mesmo resultado queImageView.ScaleType.FIT_CENTER
Inside
usado comAlignment.Center
alcança o mesmo resultado queImageView.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
eboundsInParent
aLayoutCoordinates
. (Icacdd, b/152735784, links em inglês) DrawLayerModifier
edrawLayer()
agora padronizamclipToBounds
eclipToOutline
comofalse
. (I0eb8b, b/152810850, link em inglês)LayoutResult
foi renomeado comoMeasureResult
. (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 usarContentColorAmbient
diretamente comProviders
(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, uselocaleLayoutDirection
noConfigurationAmbient
(I851b1, link em inglês)- O novo
LifecycleOwnerAmbient
está disponível. Agora uma Activity usada com a IU do Compose precisa ampliarandroidx.activity.ComponentActivity
(ouAppCompatActivity
). OsetContent
naandroid.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 modificadorModifier.onChildPositioned
. (I5ade7, b/151141173, b/151641453, b/151818355, links em inglês) toFrameworkRect
/toFrameworkRectF
foi renomeado comotoAndroidRect
/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 comoInnerPadding
. 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
eCenter
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, useBox
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
aTypography
, 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. UseEmphasisAmbient.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
ehorizontalGravity
aRow
eColumn
, respectivamente. (I7dc5a, link em inglês) ui-text module was renamed as
ui-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()
comoContentDrawScope
- Remoção de todos os parâmetros em
draw()
DrawScope
tem a mesma interface do antigoCanvasScope
ContentDrawScope
tem o métododrawContent()
- Definição do escopo do receptor de
runOnIdleCompose
erunOnUiThread
agora são funções globais, e não métodos emComposeTestRule
. (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 { ... }
ouby mutableStateOf(...)
. (I22c16, link em inglês) ColoredRect
está obsoleto. UseBox(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 comoui-text
.ui-text
agora contém os compostosCoreText
eCoreTextField
(IB7d47, link em inglês) - Os compostos
ui-framework/CoreText
,CoreTextField
foram movidos paraui-text-compose
. É recomendável incluirui-text-compose
no seu projeto. (I32042, link em inglês) wrapContentWidth
ewrapContentHeight
foram atualizados para esperar umAlignment
vertical ou horizontal em vez de qualquerAlignment
. O modificador de gravidade foi atualizado para aceitarAlignment
vertical ou horizontal.Row
,Column
eStack
foram atualizadas para ter compatibilidade comAlignment
s contínuos personalizados. (I7731b, link em inglês)- Criação da API
PixelMap
para oferecer compatibilidade com consultas de informações de pixel de umImageAsset
. (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 porandroidx.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 deandroidx.ui.core
para o pacoteandroidx.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 comoPaintBox(Painter)
- Criação do composto
Vector
que se comporta comoImage
, mas com umVectorAsset
em vez de umImageAsset
(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 interfaceParentDataModifier
ou use o modificadorLayoutTag
. (I51368, b/150953183, links em inglês) OnPositioned
foi removido para dar preferência ao uso do modificadoronPositioned
(I2ea3c, link em inglês)- Os membros
RowScope
eColumnScope
agora podem ser acessados fora deRow
eColumn
. (I7112a, link em inglês) Container
está obsoleto. UseBox
. (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()
erememberSavedInstanceState()
. Elas são semelhantes astate()
eremember()
, 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 compostosBox
ouStack
com modificadores adequados aplicados (Idf5e0, link em inglês) - Mudança das APIs
MaterialTheme
, comoMaterialTheme.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
edispatchOnSubscribe: 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 paraandroidx.ui.node.UiComposer
, eandroidx.compose.Compose.subcomposeInto
foi movido paraandroidx.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âmetroLayoutDirection
(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
paraandroidx.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
eicon
(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
eandroidx.ui:ui-material-icons-extended
. Você pode depender deandroidx.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 doandroidx.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
ePathNode
/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)
FloatingActionButtonKt
Agora, 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
aGestureScope
(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
paraGestureScope
(I56211) - Adição de
findBySubstring
e filtros correspondentes aFindersKt
. (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
aandroidx.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