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

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.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
28 de janeiro de 2021 - - - 1.0.0-alpha11

Estrutura

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

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

GrupoDescrição
compose.animationCrie animações nos aplicativos Jetpack Compose para enriquecer a experiência do usuário.
compose.compilerTransforme funções @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.

Como declarar dependências

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

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

dependencies {
    implementation "androidx.compose.material:material:1.0.0-alpha11"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.21-2"
        kotlinCompilerExtensionVersion "1.0.0-alpha11"
    }
}

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

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

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

Versão 1.0.0

Versão 1.0.0-alpha11

28 de janeiro de 2021

Lançamento do androidx.compose.material:material-*:1.0.0-alpha11. A versão 1.0.0-alpha11 contém estas confirmações (link em inglês).

Mudanças na API

  • Promove algumas APIs do Material Design para deixarem de ser @Experimental (I5d20e).
  • Adicionamos o parâmetro de descrição de conteúdo a Image e Icon. Ele é usado para fornecer descrição para os serviços de acessibilidade (I2ac4c).
  • Mudança das interfaces de parâmetro com estado do Material Design para que tenham funções @Composable que retornam State<T>. Adição de Animatable.asState() para facilitar a conversão de um Animatable em um State. Também muda o animationElevation para que se torne uma extensão de suspensão no Animatable (If613c).
  • Snackbar, SnackbarHost, SnackbarHostState não são mais @ExperimentalMaterialAPI (Id1fb5).
  • Muda Typography, Shapes e TabPosition para deixarem de ser classes de dados. Adição de função de cópia para Typography e Shapes para substituir as que foram geradas (I40037).
  • Algumas APIs Material anteriormente suspensas foram excluídas (Ifaa25).

Correções de bugs

  • O uso de onCommit, onDispose e onActive foi suspenso em favor das APIs SideEffect e DisposableEffect (If760e).
  • A Transition baseada em TransitionDefinition foi suspensa (I0ac57)
  • O estado inicial de updateTransition agora é compatível (Ifd51d).
  • WithConstraints foi reformulada como BoxWithConstraints e movida para fund.layout (I9420b, b/173387208).
  • Pare de usar o scrollBy que não é de suspensão, remova scrollTo que não é de suspensão

    Recomendamos o uso de funções de suspensão para controlar a rolagem e aguardar a conclusão dela. Estamos eliminando o uso e/ou removendo as versões que não são de suspensão dessas funções como parte dessa transição (Ie9ced).

  • Pare de usar o smoothScrollBy que não é de suspensão Agora recomendamos o uso de funções de suspensão para controlar a rolagem e aguardar a conclusão dela. Estamos eliminando o uso de versões que não são de suspensão dessas funções como parte dessa transição (I12880).

  • Introdução de ComposeContentTestRule, que estende ComposeTestRule e define setContent, que foi removido de ComposeTestRule. Adição de um método de fábrica createEmptyComposeRule() que retorna um ComposeTestRule e não inicia uma Activity para você. Use-o quando quiser iniciar a Activity durante o teste, por exemplo, usando ActivityScenario.launch (I9d782, b/174472899).

  • A ondulação usada no Button e FloatingActionButton não pode mais ser personalizada por uma nova indicação pelo AmbientIndication. A intenção não era ser uma forma de personalizar esses componentes e isso agora os torna consistentes com outros do Material Design. Para personalizar ondulações em um app, consulte RippleTheme (I546c5).

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

  • BasicTextField recebeu um novo parâmetro chamado decorationBox. Ele permite adicionar decorações como ícones, marcadores, etiquetas e similares ao campo de texto e aumentar a área de toque do destino dele (I16996).

  • Correção de um bug que não permitia definir a largura do campo de texto do material como inferior a 280.dp (I78373).

  • O parâmetro canDrag foi removido do Modifier.draggable (Ic4bec, b/175294473).

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

  • Surface agora pode ter vários filhos de layout (I66a92, b/144488459).

  • invalidate e writingReference() agora foram suspensos em favor de currentRecomposeScope e RememberComAnnotationReference, respectivamente (I583a8).

  • Mudança de PopupPositionProvider para usar coordenadas relativas à janela, não coordenadas globais. Renomeação de parentGlobalBounds para anchorBounds e mudança de windowGlobalBounds para windowSize: IntSize (I2994a).

  • Duration e Uptime serão substituídos por milissegundos Long, e esta etapa removerá a dependência de entrada do ponteiro nessas classes (Ia33b2, b/175142755, b/177420019).

  • AnimatedFloat.fling que aceita FlingConfig foi removido. Use a Animatable.animateDecay de suspensão (I4659b, b/177457083).

  • clickable, toggleable e selectable agora podem ser criados fora da composição (I0a130, b/172938345, b/175294473).

  • Easing foi mudado para uma interface funcional (Ibbe5).

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

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

  • Remoção dos métodos monotonicFrameAnimationClockOf experimentais (Ib753f, b/170708374).

  • Suspensão dos métodos de coordenadas globais e novos métodos de coordenadas baseados em janela (Iee284).

  • Adição de Modifier.toolingGraphicsLayer, que adiciona um modificador de camada gráfica quando a inspeção é ativada (I315df).

  • FocusRequester.createRefs agora está marcado como experimental, já que pode mudar (I2d898, b/177000821).

  • SemanticsPropertyReceiver.hidden foi renomeado como invisibleToUser e marcado como @ExperimentalComposeUiApi. AccessibilityRangeInfo foi renomeado como ProgressBarRangeInfo. stateDescriptionRange foi renomeado como progressBarRangeInfo. AccessibilityScrollState foi renomeado como ScrollAxisRange. horizontalAccessibilityScrollState foi renomeado como horizontalScrollAxisRange. verticalAccessibilityScrollState foi renomeado como verticalScrollAxisRange (Id3148).

  • Aproveite o TestCoroutineDispatcher no teste (I52b6).

  • A API de gráficos vetoriais foi atualizada para ser compatível com a análise de tonalidades aplicada à raiz dos gráficos vetoriais (Id9d53, b/177210509).

Versão 1.0.0-alpha10

13 de janeiro de 2021

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

Mudanças na API

  • Modificação de Velocity para ter partes de componentes e operações matemáticas (Ib0447).
  • @ExperimentalTesting foi renomeado para @ExperimentalTestApi para ser consistente com anotações de API experimentais semelhantes (Ia4502, b/171464963).
  • Renomeação de Posição para DpOffset e removida getDistance() (lb2dfd).
  • Renomeação de Color.useOrElse() como Color.takeOrElse() (Ifdcf5).
  • Adição de Toggle a Strings.kt de fundação (I4a5b7, b/172366489).
  • FlowRow e FlowColumn foram suspensos. Use um layout personalizado (I09027).
  • O uso de Modifier.focus() e Modifier.focusRequester() foi suspenso. Use Modifier.focusModifier() e Modifier.focusReference() (I75a48, b/175160751, b/175160532, b/175077829).
  • O nativeClass foi movido para o módulo ui e definido como interno. Atualização dos usos de nativeClass em implementações equivalentes para usar "is MyClass" (I4f734).

Correções de bugs

  • Adição de compatibilidade com campos de texto desativados e somente leitura (I35279, b/171040474, b/166478534).
  • animate() agora é substituído por animateAsState(), que retorna um State<T> em vez de T. Isso permite um desempenho melhor, já que o escopo de invalidação pode ser restrito ao local em que o valor do State é lido (Ib179e).
  • Adição da API Semantics Role e adição de Role como um parâmetro de SemanticsModifier clicável, selecionável e alternável. Mudança de Modifier.progressSemantics para que o Slider também possa usá-lo (I216cd).

Versão 1.0.0-alpha09

16 de dezembro de 2020

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

Mudanças na API

  • Adição da API para acionar manualmente a animação definida e arrastar em Modifier.swipeable (Iaa17a, b/162408885).
  • Renomeação de objetos *Constants, como ButtonConstants, para terminar com "Defaults", como ButtonDefaults. Também remove os prefixos default desnecessários das propriedades nesses novos objetos (Ibb915, b/159982740).
  • O Compose é compatível com getters de propriedade que podem fazer invocações de composição. A compatibilidade permanece, mas a sintaxe para declarar um getter da propriedade como @Composable foi modificada.

    A sintaxe agora suspensa para fazer isso era a anotação da propriedade em si:

        @Composable val someProperty: Int get() = ...
    

    A sintaxe que agora é correta para fazer isso é a anotação do getter da propriedade:

       val someProperty: Int @Composable get() = ...
    

    As duas sintaxes funcionarão por algum tempo, mas a antiga de uso suspenso se tornará um erro de compilação (Id9197).

  • Adição da biblioteca androidx.compose.material:material-ripple, que contém APIs de ondulação para permitir a criação de componentes interativos sem a necessidade do restante da biblioteca do Material Design. rememberRippleIndication foi suspenso e substituído por rememberRipple (Ibdf11).

Correções de bugs

  • Lambdas em modificadores de deslocamento agora retornam IntOffset em vez de Float (Ic9ee5, b/174137212, b/174146755).
  • O ShaderBrush foi refatorado para criar lentamente uma instância de sombreador quando as informações de dimensionamento do ambiente de desenho estão disponíveis. Isso é útil para definir gradientes que ocupam os limites de desenho completos de um elemento que pode ser composto no momento da composição, sem precisar fazer implementações DrawModifier personalizadas.

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

  • O Modifier.focusObserver teve o uso suspenso. Use Modifier.onFocusChanged ou Modifier.onFocusEvent (I30f17, b/168511863, b/168511484).

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

  • Dp.VectorConverter, Position.VectorConverter, etc, foram movidos para animation-core e os VectorConveters antigos foram suspensos (If0c4b).

  • A API Autofill agora é experimental e requer ativação (I0a1ec).

  • Adição de declarações de desestruturação para criar instâncias de FocusRequester (I35d84, b/174817008).

  • accessibilityLabel foi renomeado como contentDescription. accessibilityValue foi renomeado como stateDescription (I250f2).

  • Nova função InfiniteRepeatable para criar um InfiniteRepeatableSpec (I668e5).

  • O comportamento de posicionamento de DropdownMenus foi mudado de acordo com a especificação do Material Design (I34c72, b/116894123).

  • Adição de compatibilidade de InteractionState com TextFields (I61d91).

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

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

Versão 1.0.0-alpha08

2 de dezembro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha08, androidx.compose.material:material-icons-core:1.0.0-alpha08 e androidx.compose.material:material-icons-extended:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estas confirmações.

Mudanças na API

  • Agora, o MaterialTheme define as cores corretas para as alças e para o segundo plano da seleção. Apps que não são do Material podem usar manualmente AmbientTextSelectionColors para personalizar as cores usadas para seleção (I1e6f4, b/139320372, b/139320907).
  • Adição de verificação de lint para posicionamento e nomeação do parâmetro lambda composto, para verificar a consistência com as diretrizes do Compose. Também ocorreu a migração de algumas APIs usando children como o nome do lambda final para content, de acordo com a verificação e as orientações do lint (Iec48e).
  • Renomeação de VectorAsset como ImageVector. VectorAsset movido e renomeado como Builder para ser uma classe interna de ImageVector, de acordo com as diretrizes do conselho da API. Adição de typealias de VectorAssetBuilder para vincular ImageVector.Builder para compatibilidade (Icfdc8).
  • ImageAsset e métodos relacionados foram renomeados como ImageBitmap (Ia2d99).
  • Propriedades semânticas de base movidas para iu (I6f05c).
  • fun RippleIndication() foi suspenso e substituído por rememberRippleIndication() para consistência com outras APIs (Id8e2c).
  • Adição de um parâmetro singeLine a BasicTextField, TextField e OutlinedTextField. Defina esse parâmetro como verdadeiro para tornar o campo de texto uma única linha rolável horizontalmente (I57004, b/168187755).

Correções de bugs

  • A ação semântica Dismiss foi adicionada (I2b706).
  • As APIs DrawModifier foram movidas do pacote androidx.compose.ui para androidx.compose.ui.draw. Criação do arquivo DrawModifierDeprecated.kt para incluir os métodos typealiases/helper para ajudar na migração da suspensão de uso para as APIs atuais (Id6044, b/173834241).
  • Renomeação de Modifier.drawLayer para Modifier.graphicsLayer. Além disso, houve a atualização das classes relacionadas para GraphicsLayer de acordo com o feedback da API (I0bd29, b/173834241).
  • <T> foi removido da declaração de SubcomposeLayout. Você pode usá-lo sem especificar um tipo agora (Ib60c8).
  • Adição de APIs Modifier.scale/rotate como conveniências para drawLayer.
    • Modifier.drawOpacity foi renomeado como Modifier.alpha.
    • Modifier.drawShadow foi renomeado como Modifier.shadow (I264ca, b/173208140).
  • O parâmetro de alinhamento do Box foi renomeado como contentAlignment (I2c957).
  • Os modificadores offsetPx foram renomeados como offset. Agora, eles usam parâmetros lambda em vez de State (Ic3021, b/173594846).
  • Introdução às APIs SweepGradientShader e SweepGradientBrush (Ia22c1).
  • Adição de verificação de lint para parâmetros Modifier em funções que podem ser compostas. Essa verificação de lint confere a nomenclatura, o tipo de retorno, o valor padrão e a ordem do parâmetro para garantir consistência com as diretrizes do Compose (If493b).
  • API TextFieldValue atualizada.
    • TextFieldValue.composition agora é somente leitura.
    • Remoção da exceção gerada para intervalo de seleção inválido (I4a675, b/172239032).
  • Adição de uma nova sobrecarga de Modifier.drawLayer(). É necessário um bloco lambda em um novo GraphicsLayerScope, onde você define os parâmetros de camada de uma forma que permite pular a recomposição e o novo layout quando a mudança de estado acontece. O DrawLayerModifier agora é interno como forma de preparo para a migração da lógica para o método placeable.placeWithLayer() do LayoutModifier (I15e9f, b/173030831).
  • Ambientes suspensos nomeados com Ambient como sufixo e substituídos por novas propriedades prefixadas com Ambient, seguindo outras diretrizes da API Compose e Ambients (I33440).
  • Adição de verificação de lint para conferir se as fábricas do Modifier usam androidx.compose.ui.composed {} internamente, em vez de serem marcadas como @Composable (I3c4bc).
  • Renomeação do argumento semântico, mergeAllDescendants como mergeDescendants (Ib6250).
  • O controle de tempo em testes (TestAnimationClock e os usos dele) agora é experimental (I6ef86, b/171378521).
  • Remoção do antigo módulo ui-test e dos stubs dele (I3a7cb).
  • TextUnit.Inherit renomeado como TextUnit.Unspecified para consistência com outras unidades (Ifce19).
  • A interface Alignment foi atualizada e transformada em funcional (I46a07, b/172311734).
  • id foi renomeado como layoutId para LayoutIdParentData. Measurable.id foi renomeado como Measurable.layoutId (Iadbcb, b/172449643).

Versão 1.0.0-alpha07

11 de novembro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha07, androidx.compose.material:material-icons-core:1.0.0-alpha07 e androidx.compose.material:material-icons-extended:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estas confirmações.

Mudanças na API

  • Emphasis foi suspensa e substituída por AmbientContentAlpha. AmbientContentAlpha é uma abstração mais simples que representa o conteúdo alfa em parte da hierarquia, de forma semelhante a como AmbientContentColor representa a cor de conteúdo preferencial. Text e Icon agora consomem o valor atual do AmbientContentAlpha por padrão e você pode fazer isso manualmente: color.copy(alpha = AmbientContentAlpha.current) para ter o mesmo efeito nos seus componentes. Em vez de usar ProvideEmphasis, você pode fornecer um valor diretamente pelo AmbientContentAlpha e usar os novos níveis padrão em ContentAlpha para substituir o EmphasisLevels antigo (Idf03e, b/159017896).
  • Adição de androidx.compose.material.AmbientContentColor para substituir androidx.compose.foundation.AmbientContentColor (I84f7b, b/172067770).
  • Adição de androidx.compose.material.Text para substituir androidx.compose.foundation.Text como um componente Text temático e de alto nível. Para um componente de texto básico que não consuma a cor / o estilo do texto do tema, use BasicText (Ie6ae0).
  • Adição de maxLines a TextFields (Ib2a5b).
  • Atualize TextFields para aceitar KeyboardOptions (Ida7f3).
  • Surface agora usa a elevação absoluta (total) ao calcular sobreposições de elevação, portanto, uma Surface aninhada em outra Surface usará a elevação combinada para desenhar a sobreposição (I7bd2b, b/171031040).

Correções de bugs

  • captureToBitmap movidos para captureToImage. (I86385).
  • O uso de AmbientTextStyle, ProvideTextStyle e AmbientContentColor de base está suspenso. Em vez disso, use as novas versões disponíveis na biblioteca Material. Em aplicativos que não usam Material, crie seus próprios ambientes de temas específicos do sistema de design que possam ser consumidos nos seus componentes (I74acc, b/172067770).
  • O uso do foundation.Text foi suspenso e ele foi substituído por material.Text. Para uma API de texto básica e discreta que não consome valores de um tema, consulte androidx.compose.foundation.BasicText (If64cb).
  • Renomeação de KeyboardOptions como ImeOptions (I82f36).
  • KeyboardType e ImeAction foram movidos para KeyOptions (I910ce).
  • Suspensão de uso de BaseTextField. Use BasicTextField (I896eb).
  • A anotação ExperimentalSubcomposeLayoutApi foi removida. SubcomposeLayout agora pode ser usado sem adicionar @OptIn (I708ad).
  • FirstBaseline e LastBaseline foram movidos para o pacote androidx.compose.ui.layout (Ied2e7).
  • Atualização da API Icon para assumir Color.Unspecified como uma tonalidade possível, que desenha o recurso ou o Painter fornecido sem um ColorFilter. Anteriormente, tentativas de ignorar a tonalidade com Color.Unspecified resultavam em uma cor transparente que acabava sem renderização alguma (I049e2, b/171624632).
  • relativePaddingFrom foi renomeado como paddingFrom. O modificador paddingFromBaseline foi adicionado, como conveniência para a especificação de distâncias de limites de layout para linhas de base do texto (I0440a, b/170633813).
  • LaunchedTask foi renomeado como LaunchedEffect para fins de consistência com as APIs SideEffect e DisposableEffect. Para incentivar as práticas recomendadas, o LaunchedEffect sem parâmetros de assunto não será permitido (Ifd3d4).
  • MeasureResult foi removido do MeasureScope (Ibf96d, b/171184002).
  • Vários símbolos relacionados ao layout foram movidos de androidx.compose.ui para androidx.compose.layout.ui (I0fa98, b/170475424).

Versão 1.0.0-alpha06

28 de outubro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha06, androidx.compose.material:material-icons-core:1.0.0-alpha06 e androidx.compose.material:material-icons-extended:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estas confirmações.

Mudanças na API

  • androidx.compose.foundation.Icon foi movido para androidx.compose.material.Icon. Você também pode usar o componente de imagem / Modifier.paint() com um Painter se não quiser usar a biblioteca Material (I9f622).
  • Adição de FloatingActionButtonElevation para representar a elevação usada por FABs em estados diferentes. Consulte FloatingActionButtonConstants.defaultElevation() para a implementação padrão (I2d4f5).
  • Adição da interface SwitchColors para representar cores usadas por um Switch em estados diferentes. Consulte SwitchConstants.defaultColors para personalizar essas cores (I93805).
  • Adição das interfaces ButtonElevation e ButtonColors para representar a elevação e as cores usadas por botões em estados diferentes. Consulte as funções padrão em ButtonConstants para personalizar esses parâmetros (Ic5b7b).
  • Adição da interface RadioButtonColors para representar cores usadas por um RadioButton em estados diferentes. Consulte RadioButtonConstants.defaultColors() para personalizar as cores usadas em estados diferentes (I74130).
  • Adição da interface CheckboxColors para representar cores usadas por uma caixa de seleção em estados diferentes. Consulte CheckboxConstants.defaultColors() para personalizar as cores usadas em estados diferentes (I7dbdb).

Correções de bugs

  • Os componentes do Material Design não definem mais a elevação como zIndex. Isso significa que, dentro do mesmo pai, o filho com tamanho de sombra maior não será desenhado sobre o filho com o menor automaticamente. Se você ainda precisar desse comportamento, defina o Modifier.zIndex() manualmente, quando necessário. (I70417, b/117662332).
  • Substituição do uso de VectorPainter pelo rememberVectorPainter para indicar melhor que a API que pode ser composta usa internamente o "remember" de modo a manter dados entre composições (Ifda43).
  • Ativação de transições em ComposeTestRule. Remoção da opção para ativar o cursor piscante na ComposeTestRule (If0de3).
  • Adição da opção de teclado de linha única para CoreTextField (I72e6d).
  • Renomeação da API Radius como CornerRadius para expressar melhor a forma de uso dela no Compose. Atualização da documentação para indicar que raios negativos dos cantos são fixados a zero (I130c7, b/168762961).
  • Refatoração de DrawScope e ContentDrawScope para que sejam interfaces em vez de classes abstratas.
    • Criação da implementação CanvasDrawScope do DrawScope.
    • Implementações refatoradas do DrawScope para usar o CanvasScope.
    • Criação do DrawContext para unir dependências para o DrawScope.
    • Remoção de métodos que tiveram o uso suspenso no DrawScope (I56f5e).
  • Box agora é uma função inline (Ibce0c, b/155056091).

Versão 1.0.0-alpha05

14 de outubro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha05, androidx.compose.material:material-icons-core:1.0.0-alpha05 e androidx.compose.material:material-icons-extended:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Mudanças na API

  • Pop-ups e caixas de diálogo agora herdam FLAG_SECURE da janela mãe. Adição de opção para configurar isso explicitamente (I64966, b/143778148, b/143778149)
  • Modifier.swipeable agora tem limites de 56.dp para estados por padrão (Iab825, b/168610267).
  • Todos os estados de scaffold marcados como @Stable. drawerGesturesEnabled em ScaffoldState foram movidos para o próprio Scaffold (I36645, b/168297016).
  • Remoção de um tipo anulável dos parâmetros lambda Scaffold, você pode usar emptyContent() para representar a ausência de conteúdo para um determinado parâmetro (I2b318, b/157633857, b/158551084).
  • Suspensão do uso das APIs contentColor() e currentTextStyle() e substituição delas pelos ambientes AmbientContentColor e AmbientTextStyle, respectivamente. É possível acessar o valor atual usando .current na propriedade do ambiente, assim como em qualquer outro ambiente. Essa mudança foi feita para manter a consistência e para evitar a existência de várias maneiras de alcançar o mesmo resultado. Também renomeia algumas propriedades de ambiente para descrever melhor a finalidade delas da seguinte maneira:

    • ContentColorAmbient -> AmbientContentColor
    • TextStyleAmbient -> AmbientTextStyle
    • IndicationAmbient -> AmbientIndication
    • EmphasisAmbient -> AmbientEmphasisLevels
    • RippleThemeAmbient -> AmbientRippleTheme (I37b6d)
  • Adição de AmbientElevationOverlay, permitindo a personalização / desativação da sobreposição de elevação padrão aplicada em Surfaces com o tema escuro (I5b74d).

Correções de bugs

  • Como parte da padronização de valores de sentinela para classes in-line, renomeie a Color.Unset como Color.Unspecified para consistência com outras classes in-line (I97611, b/169797763)
  • Introdução de TextOverflow.None. Quando overflow for "None", o Text não será mais processado e informará o tamanho real para o LayoutNode (I175c9, b/158830170)
  • launchInCompose foi renomeado como LaunchedTask para corresponder às diretrizes da API Compose (I99a8e)
  • OnPositionedModifier foi renomeado como OnGloballyPositionedModifier e onPositioned() foi renomeado como onGloballyPositioned(). (I587e8, b/169083903)

Versão 1.0.0-alpha04

1º de outubro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha04, androidx.compose.material:material-icons-core:1.0.0-alpha04 e androidx.compose.material:material-icons-extended:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Mudanças na API

  • Exposição de parâmetros InteractionState em componentes do Material com estado para permitir a mudança e a leitura / o controle do estado (Iaca5f, b/168025711, b/167164434).
  • Mudanças nos parâmetros *color em RadioButton e TriStateCheckbox para personalizar totalmente as cores usadas em cada estado, além de mudar como as cores são animadas entre os estados, se desejado. Consulte as novas funções de cor animateDefault* em CheckboxConstants e RadioButtonConstants para ver mais informações (I1c532).
  • Renomeação de rememberBackdropState como rememberBackdropScaffoldState e adição de outro parâmetro para o relógio da animação. Renomeação do parâmetro backdropScaffoldState do BackdropScaffold como scaffoldState. Renomeação do BackdropConstants como BackdropScaffoldConstants (Ib644d).
  • Adição do componente experimental BottomSheetScaffold (Ie02f0, b/148996320).
  • Adição do componente experimental ModalBottomSheetLayout (Ic209e, b/148996320).
  • Renomeação de ButtonConstants/FloatingActionButtonConstants.defaultAnimatedElevation como defaultElevation. Agora, um valor Dp é retornado em vez de um AnimatedValue (I5f3ed).

Correções de bugs

  • Atualização de várias APIs Graphics
    • As APIs de transformação de escala e rotação foram atualizadas para consumir um único parâmetro Offset para representar a coordenada dinâmica em vez de parâmetros de flutuação separados para as coordenadas x/y em DrawScope e DrawTransform.
    • Remoção dos métodos Rect.expandToInclude e Rect.join.
    • Documentação do Radius atualizada para informar oval, além de elíptico.
    • Adição da documentação para indicar que o construtor público da classe Radius in-line não deve ser chamado diretamente, mas os objetos Radius precisam ser instanciados por meio dos construtores de função deles.
    • Remoção das APIs RoundRect para consultar topRight, bottomRight, bottomCenter etc.
    • Substituição do Rect.shift suspenso por Rect.translate.
    • Remoção das APIs RoundRect.grow e Rect.shrink.
    • Renomeação de RoundRect.outerRect para Rect.boundingRect.
    • Remoção dos métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect e Rect.isStadium.
    • Renomeação de RoundRect.longestSide para RoundRect.maxDimension.
    • Renomeação de RoundRect.shortestSide para RoundRect.minDimension.
    • Mudança de RoundRect.center para que seja uma propriedade em vez de uma função.
    • Atualização do construtor RoundRect para consumir propriedades do Radius em vez de parâmetros individuais para valores de raio x/y.
    • Remoção das APIs Size que pressupunham ser um retângulo com origem em 0,0.
    • Adição de uma API de destruição ao Radius.
    • Migração de várias funções de extensão RoundRect para serem propriedades
    • (I8f5c7, b/168762961).
  • Suspensão do uso de foundation.Box. 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).
  • O uso dos parâmetros de decoração do Box está suspenso. 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 suspenso
    • (If086a, b/167737376).
  • Evitamos importações estáticas de conteúdo de escopos de layout, por exemplo, alignWithSiblings no RowScope. A alternativa do escopo explícito precisa ser usada: with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) } (I216be, b/166760797).

Versão 1.0.0-alpha03

16 de setembro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha03, androidx.compose.material:material-icons-core:1.0.0-alpha03 e androidx.compose.material:material-icons-extended:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Mudanças na API

  • Renomeia o parâmetro onSelect de BottomNavigationItem para onClick (I91925, b/161809324)
  • Adiciona o parâmetro InteractionState a BottomNavigationItem e Tab, permitindo a mudança desse estado e o ajuste de como o componente aparece em diferentes estados (Ia3e9e, b/168025711).
  • Remove os parâmetros disabledBackgroundColor e disabledContentColor dos botões. Use as novas funções de cor padrão dentro de ButtonConstants. Se você já define contentColor / backgroundColor explicitamente, use essas funções padrão e personalize alguns / todos os parâmetros para evitar a substituição da cor para os estados ativado / desativado (If9b52).
  • A cor de fundo do Textfield não usa mais a versão Alfa implicitamente. Em vez disso, qualquer cor fornecida pelo parâmetro backgroundColor será usada diretamente (Iecee9, b/167951441).
  • O InnerPadding foi renomeado como PaddingValues (I195f1, b/167389171).
  • Os parâmetros resistanceFactorAtMin e resistanceFactorAtMax em Modifier.swipeable foram substituídos por um único parâmetro de resistência. Um novo método defaultResistanceConfig foi adicionado em SwipeableConstants (I54238).
  • Adiciona compatibilidade de elevação com estado animado para Button e FloatingActionButton. A elevação agora é animada entre os estados padrão e pressionado. Para personalizar a elevação entre os estados, use ButtonConstants.defaultAnimatedElevation() e FloatingActionButtonConstants.defaultAnimatedElevation() em vez de definir um valor de DP fixo em todos os casos (I37925).
  • O parâmetro Label se tornou opcional dentro de TextField e OutlinedTextField (I267f6 e b/162234081).

Correções de bugs

  • O uso das funções de teste globais, como onNode ou waitForIdle, foi suspenso. Migre para as novas contrapartes que estão definidas em ComposeTestRule (I7f45a).
  • O uso de DpConstraints e das APIs que o usavam foi suspenso (I90cdb, b/167389835).
  • Os parâmetros minWidth e maxWidth de widthIn foram renomeados para min e max. O mesmo ocorreu para preferredWidthIn, heightIn, preferredHeightIn (I0e5e1, b/167389544).
  • Remoção das ações de semântica de rolagem para frente/para trás. Adição de etapas em AccessibilityRangeInfo (Ia47b0).
  • Os usos da gravidade foram renomeados de forma consistente para align ou alignment nas APIs de layout (I2421a, b/164077038).
  • Adição de onNode e de outros métodos globais na ComposeTestRule, porque os atuais serão suspensos (Ieae36).
  • createAndroidComposeRule e AndroidInputDispatcher foram movidos de androidx.ui.test.android para androidx.ui.test (Idef08, b/164060572).

Versão 1.0.0-alpha02

2 de setembro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha02, androidx.compose.material:material-icons-core:1.0.0-alpha02 e androidx.compose.material:material-icons-extended:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estas confirmações.

Mudanças na API

  • Adição de um componente experimental BackdropScaffold (Iad908).

Correções de bugs

  • A Matrix4 foi substituída por Matrix. Todas as outras partes do pacote vectormath foram removidas (Ibd665, b/160140398).

Versão 1.0.0-alpha01

26 de agosto de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha01, androidx.compose.material:material-icons-core:1.0.0-alpha01 e androidx.compose.material:material-icons-extended:1.0.0-alpha01. A versão 1.0.0-alpha01 contém estas confirmações.

Problema conhecido

O primeiro caractere em um TextField do Material não pode ser removido usando um backspace (b/165956313).

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

Lançamento de androidx.compose.material:material:0.1.0-dev17, androidx.compose.material:material-icons-core:0.1.0-dev17 e androidx.compose.material:material-icons-extended:0.1.0-dev17. A versão 0.1.0-dev17 contém estas confirmações.

Mudanças na API

  • Remoção de RadioGroup e RadioGroupItems que tiveram o uso suspenso. Use Row e RadioBotton (I381b7, b/163806637).
  • Remoção dos callbacks onFocusChanged do TextField. Use Modifier.focusObserver (I51089, b/161297615).
  • Suspensão do uso de Modifier.drawBorder. Use Modifier.border. A classe de dados Border foi substituída por BorderDraw (I4257d, b/158160576).
  • Renomeação de algumas propriedades em SwipeableState: swipeTarget -> targetValue, swipeProgress -> progress, swipeDirection -> direction. Adição de uma função rememberSwipeableState para criar SwipeableStates (I2fc9c, b/163129614, b/163132293).
  • Adição de compatibilidade com snackbar no posicionamento e enfileiramento adequado. Acesse-o por meio da função de suspensão SnackbarHostState.showSnackbar. Além disso:
    • Adição de componentes do SnackbarHost. Ele hospeda snackbars com base no estado e é responsável pela transição entre eles.
    • Adição de SnackbarHostState para permitir o controle sobre snackbars e hosts de snackbars, além do dissociamento do ScaffoldState. Você também pode acessar esse estado por meio de scaffoldState.snackbarHostState.
    • Adição da sobrecarga de snackbar para oferecer compatibilidade com a interface comum entre snackbarHostState e os próprios snackbars (I79aaa).
  • Adição de parâmetro ativado a IconButton e reordenação de parâmetros em IconToggleButton (I0a941, b/161809385, b/161807956).
  • Remoção da versão do ListItem com a API baseada em strings. Use a versão de slot (Ib8f57, b/161804681).
  • Remoção do componente FilledTextField suspenso. Use TextField para conseguir a implementação do Material Design no campo de texto preenchido (I5e889).
  • AlertDialog agora usa FlowRow para botões (I00ec1, b/161809319, b/143682374).
  • Adição de parâmetros em Modifier.swipeable para mudar a quantidade de resistência ao deslizar para além dos limites. Remoção dos parâmetros [min/max]Value (I93d98).
  • Adição do parâmetro backgroundColor ao LinearProgressIndicator e remoção do preenchimento interno de CircularProgressIndicator. Adição de novo ProgressIndicatorConstants.DefaultProgressAnimationSpec, que pode ser usado como AnimationSpec padrão ao animar o progresso entre os valores (If38b5, b/161809914, b/161804677).
  • Adição do parâmetro opcional velocityThreshold a Modifier.swipeable (I698ba).
  • bottomBarSize, fabSize e outros não estão mais disponíveis em ScaffoldState. Use Modifier.onPosition no componente cujo tamanho você quer descobrir. Adição dos parâmetros contentColor e Modifier a Scaffold (Ic6f7b, b/161811485, b/157174382).
  • Renomeação e reordenação de alguns parâmetros em Tab para consistência com outras APIs (Ia2d12, b/161807532).
  • Divisão de TabRow em TabRow e ScrollableTabRow, removendo isScrollable de TabRow. Exposição de edgePadding em ScrollableTabRow, permitindo controlar o espaço livre antes/depois das guias (I583e8, b/161809544).
  • Remoção do objeto TabRow e substituição por TabConstants. Mudança de TabRow.TabPosition para o nível superior (TabPosition) e do nome de indicatorContainer para indicator. Consulte as amostras e a documentação para ver informações detalhadas sobre como usar a API atualizada e os padrões (I54d45, b/161809544).
  • Ajuste do parâmetro de limites em Modifier.swipeable. Agora, ele usa um par de estados (do tipo T) e retorna o limite entre eles na forma de um ThresholdConfig. Adição de um parâmetro dismissThresholds a SwipeToDismiss, que é um lambda (DismissDirection) -> ThresholdConfig (Ie1080).
  • O controle deslizante tem mais cores para personalização granular (I73e64, b/161810475).
  • O parâmetro de cores do cartão foi renomeado para backgroundColor (I01fc1, b/161809546).
  • O snackbar tem cores de plano de fundo e conteúdo personalizáveis (I238f2, b/161804381).
  • Adição dos parâmetros modifier, backgroundColor, contentColor e scrimColor a Drawers (I23655, b/161804378).
  • O uso do composto state { ... } foi substituído pelas chamadas explícitas para remember { mutableStateOf(...) } para maior clareza. Isso reduz a plataforma geral da API e o número de conceitos de gerenciamento de estado e corresponde ao padrão by mutableStateOf() para delegação de propriedade de classe (Ia5727)
  • Renomeação do parâmetro de preenchimento do botão para contentPadding (Id252e, b/161809394).
  • Adição de um componente experimental do Material, SwipeToDismiss (I129e5).

Correções de bugs

  • Removidos onChildPositioned e OnChildPositionedModifier. Os desenvolvedores precisam usar onPositioned e OnPositionedModifier no layout filho (I4522e, b/162109766).
  • Adição do lambda mergePolicy a SemanticsPropertyKey. É possível usá-la para definir uma política personalizada para a mesclagem de semântica mergeAllDescendants. A política padrão será usar o valor pai se já estiver presente. Caso contrário, o valor filho (Iaf6c4, b/161979921).
  • IntSize agora é uma classe inline (I2bf42).
  • PlacementScope.placeAbsolute() foi renomeado como PlacementScope.place(), e o PlacementScope.place() anterior foi renomeado como PlacementScope.placeRelative(). Por essa razão, o método PlacementScope.place() não espelhará de forma automática a posição em contextos da direita para a esquerda. Se você quiser o espelhamento, use PlacementScope.placeRelative() (I873ac, b/162916675).
  • 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).
  • Renomeação de RRect para RoundRect para ajustar melhor os padrões de nomenclatura de composto Criação de construtores de função semelhantes para RRect e construtores de função RRect suspensos (I5d325).

Versão 0.1.0-dev16

5 de agosto de 2020

Lançamento de androidx.compose.material:material:0.1.0-dev16, androidx.compose.material:material-icons-core:0.1.0-dev16 e androidx.compose.material:material-icons-extended:0.1.0-dev16. A versão 0.1.0-dev16 contém estas confirmações.

Mudanças na API

  • As cores agora são uma classe final em vez de uma interface. Em vez de estender e fornecer uma implementação personalizada, crie um novo ambiente para seu objeto de tema personalizado e acesse o objeto de tema por meio do novo ambiente nos seus componentes, da mesma forma que o MaterialTheme funciona internamente (Ibae84).
  • 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).
  • Renomeação do parâmetro text de BottomNavigationItem para label, onSelected para onSelect, activeColor para selectedContentColor e inactiveColor para unselectedContentColor. Atualização da ordem dos parâmetros de acordo com as diretrizes (Icb605, b/161809324).
  • Modifier.stateDraggable foi completamente reformulado e renomeado para Modifier.swipeable. Uma nova classe SwipeableState foi introduzida, e as DrawerState e BottomDrawerState foram refatoradas para herdar dela. [Modal/Bottom]O DrawerLayout não usa mais um parâmetro onStateChange (I72332, b/148023068).
  • O pacote foundation.shape.corner foi nivelado para foundation.share (I46491, b/161887429).
  • Adição da anotação ExperimentalMaterialApi. RippleTheme foi marcado como Experimental (Ic5fa0, b/161784800).
  • 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).

Correções de bugs

  • Suspensão do uso de OnChildPositioned. Use OnPositioned no filho (I87f95, b/162109766).
  • Resolução de variados problemas de API (I077bc).
    1. Remoção da interface OffsetBase não utilizada.
    2. Alinhamento das classes Offset e IntOffset para que tenham uma superfície de API consistente.
    3. Renomeação de IntOffset.Origin para IntOffset.Zero para ser consistente com a API Offset.
    4. O método nativeCanvas foi movido da interface Canvas para que os consumidores possam criar as próprias instâncias.
    5. Criação da classe stub EmptyCanvas para refatorar DrawScope para ser um parâmetro não nulo em vez de lainit e garantir a não nulidade do campo.
    6. Renomeação das enumerações ClipOp para seguir o padrão Pascal Case.
    7. Renomeação das enumerações FilterQuality para seguir o padrão Pascal Case.
    8. Renomeação das enumerações StrokeJoin para seguir o padrão Pascal Case.
    9. Renomeação das enumerações PointMode para seguir o padrão Pascal Case.
    10. Renomeação das enumerações PaintingStyle para seguir o padrão Pascal Case.
    11. Renomeação das enumerações PathFillType para seguir o padrão Pascal Case.
    12. Renomeação das enumerações StrokeCap para seguir o padrão Pascal Case.
    13. Atualização da implementação de DrawCache para não usar mais parâmetros lateinit.
    14. Atualização de DrawScope para não usar mais delegação lenta para os parâmetros internos fillPaint e strokePaint.
    15. Atualização do composto Image para evitar o uso do Box e ter menos sobrecarga.
    16. Atualização da classe Outline para ter anotações @Immutable.
    17. Atualização de PathNode para ter anotações @Immutable em cada instrução de caminho.
    18. Atualização da subcomposição Vector para remover verificações condicionais redundantes para fins de igualdade, já que o composto já as processa.
    19. Suspensão do uso de métodos construtores de Rect em favor de construtores de função.
    20. Atualização de classes Brush e construtores de função com APIs @Immutable e @Stable.
    21. Atualização da enumeração VertexMode para seguir o padrão Pascal Case.
    22. Atualização do método DrawScope selectPaint para substituir condicionalmente os parâmetros de traço na pintura quando eles tiverem mudado.
    23. Atualização de Size para adicionar a desestruturação da API, renomear UnspecifiedSize para Unspecified e remover métodos não utilizados.
  • A caixa de diálogo foi movida para a IU (I47fa6)
  • Contato removido: SemanticsNodeInteraction.performPartialGesture. Use SemanticsNodeInteraction.performGesture (Id9b62).
  • Renomeação de SemanticsNodeInteraction.getBoundsInRoot() como SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafd, b/113333632).
  • 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).
  • Renomeação de Modifier.deternimateProgress para Modifier.progressSemantics (I9c0b4).
  • Atualização de material-icons-extended com os ícones mais recentes adicionados a Material.io/icons (I4b1d3).
  • 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 o tipo Modifier.padding().background() + anotherModifier, que interrompe a cadeia e é mais difícil de ler (Iedd58, b/161529964)
  • 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).
  • Correção da posição do pop-up em telas cortadas (Idd7dd).
  • Renomeação de Modifier.drawBackground como Modifier.background (I13677).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.compose.material:material:0.1.0-dev15, androidx.compose.material:material-icons-core:0.1.0-dev15 e androidx.compose.material:material-icons-extended:0.1.0-dev15. A versão 0.1.0-dev15 contém estas confirmações.

Atualização de dependências

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

Mudanças na API

  • O uso da anotação @Model agora está suspenso. 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).

  • O callback onFocusChange em campos de texto foi renomeado como onFocusChanged (Ida4a1).

  • Adição de parâmetros de limites em stateDraggable para especificar limites entre âncoras. Isso foi feito para definir um limite de 56 dp na gaveta inferior. Além disso, o BottomDrawerLayout agora usa um enum BottomDrawerState separado (I533fa).

  • Remoção do Modifier.ripple já 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 gratuitamente. 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 (I663b2, b/155375067).

  • Remoção da substituição suspensa do composto FilledTextField (I7f8f8).

  • O objeto Button, que contém os padrões usados pela função Button, foi renomeado como ButtonConstants (I7c5f7, b/159687878).

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

  • Suspensão do uso de RadioGroup e RadioGroupItem. Use o Box com Modifier.selectable, Row e Column para fazer um conjunto adequado de radioButton de opções pelo seu design (I7f5cf, b/149528535).

  • O Material Outlined Textfield foi adicionado (I1a518).

  • O uso de androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue foi suspenso. Os compostos TextField, FilledTextField e CoreTextField que usam esse tipo também foram suspensos. Use androidx.ui.input.TextFieldValue (I4066d, b/155211005).

  • TabRow.TabPosition contém posição em Dp, não em IntPx (I34a 07, b/158577776).

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

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

  • Suspensão de uso de Modifier.ripple. 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 gratuitamente. 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).

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

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

  • Permissão para mostrar/ocultar o teclado de software manualmente usando SoftwareKeyboardController (Ifb9d6, b/155427736).

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

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

  • O Emphasis.emphasize() foi renomeado como Emphasis.applyEmphasis() (Iceebe).

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

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

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

  • Adição da API de slot para ícones finais e principais no FilledTextField e no processamento do estado de erro (Ic12e0).

  • A cor padrão da FAB e da FAB estendida foi modificada para MaterialTheme.colors.secondary (I3b9b9, b/154118816).

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

  • EdgeInsets foi renomeado como InnerPadding. O parâmetro innerPadding de botões do Material Design foi renomeado como padding (I66165).

  • 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 largura de material especificado (I244a7).

  • Adição da implementação do Material Design do campo de texto preenchido (Ic75cd).

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

  • Material Data Tables temporariamente removido da plataforma da API (Iaea61, link em inglês).

  • Parâmetros renomeados no divisor que pode ser composto (Ic4373).

  • Parâmetros filhos que podem ser compostos renomeados (Ia6d19).

  • MaterialTheme.emphasisLevels foi removido. Use EmphasisAmbient.current para recuperar os níveis de ênfase (IB5e40).

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

  • Mudança das APIs MaterialTheme, como MaterialTheme.colors(), MaterialTheme.typography(), que deixaram de ser funções para serem propriedades. Remoção dos parênteses das chamadas existentes. Nenhuma mudança de comportamento é esperada (I3565a).

  • As APIs FloatingActionButton foram refatoradas para aceitar lambdas compostos em vez de primitivos. Veja amostras atualizadas para informações de uso (I00622).

  • Adição do parâmetro enabled a Checkbox, Switch e Toggleable (I41c16).

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

  • Surface e Card foram movidos de androidx.ui.material.surface para androidx.ui.material (I88a6d, b/150863888).

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

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

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

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

  • O modificador Border foi renomeado como DrawBorder (I8ffcc).

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

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

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

  • Adição do componente material Scaffold. Implementações do Scaffold (I7731b).

  • Substituição de DrawBorder pelo Border Modifier (Id335a)

Correções de bugs

  • FocusModifier está suspenso e foi substituído por Modifier.focus, Modifier.focusRequest e Modifier.focusObserver. FocusState e FocusDetailedState estão suspensos e foram substituídos por FocusState2 (I46919, b/160822875, b/160922136).
  • 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 APIs Modifier.draggable e Modifier.scrollable foram reformuladas. DragDirection foi removido e substituído por Orientation. O estado necessário para rolagem foi simplificado. ScrollableState foi renomeado como ScrollableController (Iab63c, b/149460415).
  • runOnIdleCompose foi renomeado como runOnIdle (I83607).
  • As propriedades de semântica de valor único agora usam um estilo de chamada. Por exemplo, "semantics {hidden = true}" agora é escrito como: "semantics {hidden()}" (Ic1afd, b/145951226, b/145955412).
  • 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).
  • 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).
  • 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 uma nova sinalização opcional, useUnmergedTree, aos localizadores de teste (I2ce48).
  • Remoção de APIs suspensas de teste de tamanho (Iba0a0).
  • Remoção da classe inline do Shader que encapsulava a classe NativeShader. NativeShader foi renomeado como Shader. A classe inline Shader encapsulada não adicionava valor à superfície da API e era uma classe inline. Portanto, use a classe NativeShader diretamente (I25e4d).
  • Pop-ups, caixas de diálogo e menus agora herdam o MaterialTheme contextual (Ia3665, b/156527485).
  • Material DropdownMenu agora pode ser rolado. (Ide699)
  • 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 pelo 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).
  • Switch agora aparece em um estado desativado quando enabled é definido como falso (If4624, b/155941869, b/159331694).
  • Modifier.tag foi renomeado como Modifier.layoutId para evitar confusão com Modifier.testTag (I995f0).
  • Agora, as posições de Int da linha de alinhamento retornadas de Placeable#get(AlignmentLine) não são nulas. Se a linha de alinhamento consultada estiver ausente, AlignmentLine.Unspecified será retornado (I896c5, b/158134875).
  • Classe de raio refatorada para ser uma classe inline. Remoção dos métodos de criação complementares em favor do construtor de função com parâmetro padrão para que o raio ao longo do eixo y corresponda ao parâmetro obrigatório de raio do eixo x.

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

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

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

  • O componente Toggleable foi suspenso. Use o Modifier.toggleable (I35220, b/157642842).

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

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

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

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

  • MutualyExclusiveSetItem foi suspenso. Use Modifier.selectable (I02b47, b/157642842).

  • Agora o uso de TestTag está suspenso. Use Modifier.testTag (If5110, b/157173105).

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

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

  • O VerticalScroller agora fornece Column pronta para uso. O HorizontalScroller agora fornece Row pronto para uso (Ieca5d, b/157020670).

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

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

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

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

  • O uso do composto AlignmentLineOffset está suspenso. Em vez disso, use o modificador relativePaddingFrom(). O composto CenterAlignmentLine removido (I60107).

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

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

  • O FocusManagerAmbient foi removido. Use FocusModifier.requestFocus para foco (Ic4826).

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

    Inclusão do CanvasScopeSample, bem como atualização do app de demonstração para incluir uma demonstração gráfica declarativa (Ifd86d).

  • Adição da personalização de cor do cursor ao TextField (I6e33f).

  • TextFieldValue usado com TextField agora pode ser usado para recuperar atividades recreativas quando usado assim: var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() } (I5c3ce, b/155075724)

  • LayoutModifier2 foi renomeado como LayoutModifier (Id29f3).

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

  • Substituição do parâmetro CoreTextField/TextField focusIdentifier pelo FocusNode para ser integrado ao subsistema de foco (I7ea48).

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

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

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

  • Atualização da API TextField: callbacks onFocus e onBlur foram mesclados em um único callback onFocalChange com parâmetro booleano (I66cd3).

  • Adição dos parâmetros verticalGravity e horizontalGravity a Row e Column, respectivamente (I7dc5a).

  • Atualização de wrapContentWidth e wrapContentHeight para esperar um alinhamento vertical ou horizontal em vez de qualquer outro. O modificador de gravidade foi atualizado para aceitar o alinhamento vertical ou horizontal. Row, Column e Stack foram atualizados para ter compatibilidade com alinhamentos contínuos personalizados (Ib0728).

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

  • Remoção de ProvideContentColor. Basta usar ContentColorAmbient diretamente com Providers (Iee942).

  • O módulo ui-text-compose foi renomeado como ui-text. O ui-text agora contém os compostos CoreText e CoreTextField (IB7d47).

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

  • Os compostos ui-framework/CoreText e CoreTextField foram movidos para o ui-text-compose. É recomendável incluir o ui-text-compose no seu projeto (I32042).

  • Melhora na API DrawModifier:

    • Definição do escopo do receptor para draw() ContentDrawScope
    • Remoção de todos os parâmetros em draw()
    • DrawScope tem a mesma interface que o antigo CanvasScope.
    • ContentDrawScope tem o método drawContent() (Ibaced, b/152919067).
  • runOnIdleCompose e runOnUiThread agora são funções globais e não métodos em ComposeTestRule (Icbe8f).

  • [Mutable] Os operadores para delegação de propriedade de estado foram movidos para extensões compatíveis com as 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(...) (I5312c).

  • Adição de positionInParent e boundsInParent a LayoutCoordinates (Icacdd, b/152735784).

  • O ColouredRect foi suspenso. Em vez dele, use Box(Modifier.preferredSize(width, height).drawBackground(color)) (I499fa, b/152753731).

  • LayoutResult foi renomeado como MeasureResult (Id8c68).

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

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

  • O arrastável foi movido para o modificador (Id9b16, b/151959544).

  • O composto ParentData foi suspenso. 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).

  • O uso do composto Center está suspenso. Ele precisa ser substituído pelo modificador LayoutSize.Fill + LayoutAlign.Center ou por um dos compostos Box ou Stack com modificadores adequados aplicados (Idf5e0).

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

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

  • O LayoutFlexible foi renomeado como LayoutWight. O parâmetro restrito foi renomeado como preenchimento (I5977f).

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

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

  • A função do composto Opacity foi substituída pelo modificador drawOpacity (I5fb62).

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

  • Substituição da função composta DrawShadow pelo modificador drawShadow(). As sombras agora são desenhadas como parte do LayerModifier (I7112a).

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

  • O androidx.composte.ViewComposer foi movido para androidx.ui.node.UiComposer. androidx.compose.Emittable foi removido. Isso era redundante com o ComponentNode. O androidx.compose.ViewAdapters foi removido. Eles não são mais um caso de uso compatível. O uso de Compose.composeInto foi suspenso. Use setContent ou setViewContent. O uso de Compose.disposeComposition foi suspenso. Use o método dispose no Composition retornado pelo setContent. androidx.compose.Compose.subcomposeInto foi movido para androidx.ui.core.subcomposeInto. ComponentNode#emitInsertAt foi renomeado como ComponentNode#insertAt. ComponentNode#emitRemoveAt foi renomeado como ComponentNode#removeAt. ComponentNode#emitMode foi renomeado como ComponentNode#move (Idef00).

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

  • O uso do composto Wrap está suspenso. Ele pode ser substituído pelo modificador LayoutAlign ou pelo composto Stack (IB237f).

  • WithConstraints recebeu o parâmetro LayoutDirection (I6d6f7).

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

  • O composto Draw foi suspenso, por ser uma fonte comum de bugs da forma como é (I78392, b/14827027).

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

  • O composto DrawShape foi removido. Use o modificador DrawBackground (I7ceb2).

  • Compatibilidade com a direção direita para a esquerda no modificador LayoutPadding (I9e8da).

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

  • A sinalização ComposeFlags.COMPOSER_PARAM foi atualizada para true, o que mudará a estratégia de geração de código para o plug-in do Compose. Em um nível alto, isso faz com que funções @Composable sejam geradas com um parâmetro sintético extra, que é transmitido para chamadas @Composable subsequentes para que o ambiente de execução gerencie corretamente a execução. No entanto, essa é uma alteração interruptiva no binário que precisa preservar a compatibilidade no nível da fonte em todo o uso do Compose (I7971c).

  • Adição do componente Canvas. Esse composto pode ocupar algum tamanho fornecido pelo usuário e permite que você desenhe com o CanvasScope (I0d622).

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

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

  • Agora, os controles de rolagem têm o comportamento do movimento de arremesso nativo do Android (I922af, b/147493715).

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