Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Compose Material

Mem-build UI Jetpack Compose dengan Komponen Desain Material siap pakai. Ini adalah titik masuk level yang lebih tinggi untuk Compose, yang dirancang untuk menyediakan komponen yang cocok dengan yang dijelaskan di www.material.io.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
16 September 2020 - - - 1.0.0-alpha03

Struktur

Compose adalah kombinasi 7 ID Grup Maven dalam androidx. Setiap Grup berisi subkumpulan fungsi yang ditargetkan, masing-masing dengan kumpulan catatan rilisnya sendiri.

Tabel ini menjelaskan grup tersebut dan ditautkan ke setiap kumpulan catatan rilis.

GrupDeskripsi
composeMenentukan UI Anda secara terprogram dengan fungsi yang dapat dikomposisi yang mendeskripsikan bentuk dan dependensi datanya.
compose.animationMem-build animasi di aplikasi Jetpack Compose untuk memperkaya pengalaman pengguna.
compose.foundationMenulis aplikasi Jetpack Compose dengan elemen penyusun siap pakai dan memperluas dasar untuk mem-build bagian sistem desain Anda sendiri.
compose.materialMem-build Jetpack Compose UI dengan Komponen Desain Material siap pakai. Ini adalah titik masuk level yang lebih tinggi untuk Compose, yang dirancang untuk menyediakan komponen yang cocok dengan yang dijelaskan di www.material.io.
compose.runtimeElemen penyusun model pemrograman dan pengelolaan status Compose, serta runtime inti untuk Compose Compiler Plugin untuk ditargetkan.
compose.uiKomponen dasar compose UI yang diperlukan untuk berinteraksi dengan perangkat, termasuk tata letak, gambar, dan input.
uiBerfungsi dengan library Jetpack Compose.

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Compose, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.21"
        kotlinCompilerExtensionVersion "1.0.0-alpha09"
    }
}

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

Untuk informasi dependensi selengkapnya, lihat Menambahkan dependensi build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau punya masukan untuk meningkatkan kualitas library ini. Harap periksa library ini untuk mengetahui masalah yang sudah diketahui sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Melaporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.0.0

Versi 1.0.0-alpha03

16 September 2020

androidx.compose.material:material:1.0.0-alpha03, androidx.compose.material:material-icons-core:1.0.0-alpha03, dan androidx.compose.material:material-icons-extended:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit berikut ini.

Perubahan API

  • Mengganti nama parameter onSelect dari BottomNavigationItem menjadi onClick (I91925, b/161809324)
  • Menambahkan parameter InteractionState ke BottomNavigationItem dan Tab, yang memungkinkan penarikan status ini dan menyesuaikan tampilan komponen dalam status yang berbeda. (Ia3e9e, b/168025711)
  • Menghapus parameter disabledBackgroundColor dan disabledContentColor dari tombol. Sebagai gantinya, gunakan fungsi warna default baru di dalam ButtonConstants. Jika Anda telah menyetel contentColor/backgroundColor secara eksplisit, sebaiknya Anda menggunakan fungsi default ini dan menyesuaikan beberapa/semua parameter agar tidak menimpa warna untuk status diaktifkan/dinonaktifkan. (If9b52)
  • Warna latar belakang Textfield tidak menerapkan lagi alfa transparansi secara implisit. Sebagai gantinya, warna apa pun yang disediakan melalui parameter backgroundColor akan diterapkan secara langsung. (Iecee9, b/167951441)
  • InnerPadding diganti namanya menjadi PaddingValues. (I195f1, b/167389171)
  • Parameter resistanceFactorAtMin dan resistanceFactorAtMax di Modifier.swipeable diganti dengan parameter ketahanan tunggal. Metode defaultResistanceConfig baru telah ditambahkan di SwipeableConstants. (I54238)
  • Menambahkan dukungan elevasi stateful animasi untuk Button dan FloatingActionButton. Elevasi sekarang menganimasikan antara status default dan ditekan. Untuk menyesuaikan elevasi antarstatus, gunakan ButtonConstants.defaultAnimatedElevation() dan FloatingActionButtonConstants.defaultAnimatedElevation(), bukan menyetel nilai Dp tetap dalam semua kasus. (I37925)
  • Label menjadi parameter opsional di dalam TextField dan OutlinedTextField (I267f6, b/162234081)

Perbaikan Bug

  • Fungsi pengujian global seperti onNode atau waitForIdle kini tidak digunakan lagi, migrasikan ke fungsi barunya yang ditentukan di ComposeTestRule (I7f45a)
  • DpConstraint dan API yang menggunakannya tidak digunakan lagi. (I90cdb, b/167389835)
  • Parameter minWidth dan maxWidth dari widthIn diganti namanya menjadi min dan maks. Demikian pula untuk preferredWidthIn, heightIn, preferredHeightIn. (I0e5e1, b/167389544)
  • Menghapus tindakan semantik maju/mundur scroll. Menambahkan langkah di AccessibilityRangeInfo. (Ia47b0)
  • Penggunaan gravitasi secara konsisten diganti namanya menjadi untuk meratakan atau perataan dalam API tata letak. (I2421a, b/164077038)
  • Menambahkan onNode dan metode global lainnya di ComposeTestRule sebagai metode global saat ini akan dihentikan. (Ieae36)
  • Memindahkan createAndroidComposeRule dan AndroidInputDispatcher dari androidx.ui.test.android ke androidx.ui.test (Idef08, b/164060572)

Versi 1.0.0-alpha02

2 September 2020

androidx.compose.material:material:1.0.0-alpha02, androidx.compose.material:material-icons-core:1.0.0-alpha02, dan androidx.compose.material:material-icons-extended:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit berikut ini.

Perubahan API

  • Menambahkan komponen BackdropScaffold eksperimental. (Iad908)

Perbaikan Bug

  • Matrix4 diganti dengan Matrix. Semua bagian lain dari paket vectormath telah dihapus. (Ibd665, b/160140398)

Versi 1.0.0-alpha01

26 Agustus 2020

androidx.compose.material:material:1.0.0-alpha01, androidx.compose.material:material-icons-core:1.0.0-alpha01, dan androidx.compose.material:material-icons-extended:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit berikut ini.

Masalah Umum

= Karakter pertama dalam TextField material tidak dapat dihapus menggunakan backspace (b/165956313)

Versi 0.1.0-dev

Versi 0.1.0-dev17

19 Agustus 2020

androidx.compose.material:material:0.1.0-dev17, androidx.compose.material:material-icons-core:0.1.0-dev17, dan androidx.compose.material:material-icons-extended:0.1.0-dev17 dirilis. Versi 0.1.0-dev17 berisi commit berikut.

Perubahan API

  • Sebelumnya, RadioGroup dan RadioGroupItems yang tidak digunakan lagi telah dihapus. Gunakan Row dan RadioButton sebagai gantinya (I381b7, b/3816637)
  • Menghapus callback onFocusChanged dari TextField. Gunakan Modifier.focusObserver sebagai gantinya. (I51089, b/161297615)
  • Modifier.drawBorder tidak digunakan lagi. Gunakan Modifier.border sebagai gantinya. Class data Border telah diganti dengan BorderStroke (I4257d, b/158160576)
  • Mengganti nama beberapa properti di SwipeableState: swipeTarget -> targetValue, swipeProgress -> progress, swipeDirection -> direction. Menambahkan fungsi rememberSwipeableState untuk membuat SwipeableStates. (I2fc9c, b/163129614, b/163132293)
  • Dukungan Snackbar dengan pemosisian dan antrean yang tepat telah ditambahkan. Akses melalui fungsi penangguhan SnackbarHostState.showSnackbar. Selain itu:
    • Komponen SnackbarHost telah ditambahkan. Komponen ini menjadi host Snackbar berdasarkan status dan bertanggung jawab atas transisi antar-snackbar.
    • SnackbarHostState telah ditambahkan untuk memungkinkan kontrol atas snackbar, host snackbar, dan memisahkannya dari ScaffoldState. Anda juga dapat mengakses status ini melalui scaffoldState.snackbarHostState.
    • Overload snackbar telah ditambahkan untuk mendukung antarmuka umum antara snackbarbarHostState dan snackbar itu sendiri. (I79aaa)
  • Menambahkan parameter yang diaktifkan ke IconButton, dan mengurutkan ulang parameter di IconToggleButton (I0a941, b/161809385, b/140447956)
  • Versi ListItem dengan API berbasis String telah dihapus. Gunakan versi slot sebagai gantinya. (Ib8f57, b/161804681)
  • Menghapus komponen FilledTextField yang sudah tidak digunakan lagi. Sebagai gantinya, harap gunakan TextField untuk mendapatkan implementasi Filled text field Desain Material. (I5e889)
  • AlertDialog kini menggunakan FlowRow untuk tombol (I00ec1, b/160809319, b/143682374)
  • Menambahkan parameter dalam Modifier.swipeable untuk mengubah jumlah ketahanan saat menggeser melewati garis batas. Parameter [min/max]Value dihapus. (I93d98)
  • Menambahkan parameter backgroundColor ke LinearProgressIndicator dan menghapus padding internal dari CircularProgressIndicator. Menambahkan ProgressIndicatorConstants.DefaultProgressAnimationSpec baru yang dapat digunakan sebagai AnimationSpec default saat membuat animasi progres antarnilai (If38b5, b/160809914, b/160804677)
  • Parameter opsional velocityThreshold ditambahkan ke Modifier.swipeable. (I698ba)
  • bottomBarSize, fabSize, dan lainnya tidak lagi tersedia di ScaffoldState. Sebagai gantinya, gunakan Modifier.onPosition pada komponen yang ingin Anda ketahui ukurannya. Parameter contentColor dan Modifier telah ditambahkan ke Scaffold (Ic6f7b, b/161811485, b/157174382)
  • Mengganti nama dan mengurutkan ulang beberapa parameter di Tab demi konsistensi dengan API lainnya (Ia2d12, b/160807532)
  • Memisahkan TabRow menjadi TabRow dan ScrollableTabRow dengan menghapus isScrollable dari TabRow. Juga mengekspos edgePadding dalam ScrollableTabRow yang memungkinkan pengontrolan ruang kosong di depan/di belakang tab. (I583e8, b/161809544)
  • Objek TabRow telah dihapus dan diganti dengan TabConstants. TabRow.TabPosition telah dipindahkan ke level teratas (TabPosition), dan indicatorContainer telah diganti nama menjadi indicator. Lihat contoh dan dokumentasi untuk informasi mendetail tentang cara menggunakan API yang diupdate dan default-nya. (I54d45, b/161809544)
  • Parameter ambang batas pada Modifier.swipeable telah diubah; sekarang parameter ini mengambil sepasang status (dari jenis T) dan menampilkan ambang batas di antara status tersebut dalam bentuk ThresholdConfig. Parameter dismissThresholds ditambahkan ke SwipeToDismiss yang merupakan lambda (DismissDirection) -> ThresholdConfig. (Ie1080)
  • Penggeser memiliki lebih banyak warna untuk penyesuaian terperinci (I73e64, b/161810475)
  • Nama parameter warna kartu telah diganti menjadi backgroundColor (I01fc1, b/160809546)
  • Sekarang, snackbar memiliki warna latar belakang dan konten yang dapat disesuaikan (I238f2, b/161804381)
  • Parameter penyesuaian modifier, backgroundColor, contentColor, dan scrimColor telah ditambahkan ke Drawers samping (I23655, b/160804378)
  • state { ... } yang dapat dikomposisi kini tidak lagi digunakan agar panggilan eksplisit ke remember { mutableStateOf(...) } menjadi lebih jelas. Ini mengurangi keseluruhan tampilan API dan jumlah konsep untuk pengelolaan status, serta mencocokkan pola by mutableStateOf() untuk delegasi properti class. (Ia5727)
  • Nama parameter padding tombol telah diganti menjadi contentPadding (Id252e, b/161809394)
  • Menambahkan komponen materi eksperimental SwipeToDismiss. (I129e5)

Perbaikan Bug

  • Menghapus onChildPositioned dan OnChildPositionedModifier. Sebagai gantinya, developer sebaiknya menggunakan onPositioned dan OnPositionedModifier pada tata letak turunan. (I4522e, b/162109766)
  • Menambahkan lambda mergePolicy ke SemanticsPropertiKey. Ini dapat digunakan untuk menentukan kebijakan kustom untuk penggabungan semantik mergeAllDescendants. Kebijakan defaultnya adalah menggunakan nilai induk jika sudah ada, atau nilai turunan jika tidak ada. (Iaf6c4, b/161979921)
  • IntSize kini menjadi class inline (I2bf42)
  • PlacementScope.placeAbsolute() diganti namanya menjadi PlacementScope.place(), dan PlacementScope.place() sebelumnya diganti namanya menjadi PlacementScope.placeRelative(). Akibatnya, metode PlacementScope.place() tidak akan lagi secara otomatis mencerminkan posisi dalam konteks kanan-ke-kiri. Jika menginginkannya, gunakan saja PlacementScope.placeRelative(). (I873ac, b/162916675)
  • Menghentikan penggunaan PxBounds untuk digantikan Rect. Memperbarui semua penggunaan PxBounds dengan Rect dan menambahkan penghentian/penggantian yang benar dengan anotasi untuk membantu migrasi. (I37038, b/162627058)
  • Mengganti nama RRect menjadi RoundRect agar lebih cocok untuk menulis pola penamaan Membuat konstruktor fungsi serupa pada RRect dan konstruktor fungsi RRect yang tidak digunakan lagi (I5d325)

Versi 0.1.0-dev16

5 Agustus 2020

androidx.compose.material:material:0.1.0-dev16, androidx.compose.material:material-icons-core:0.1.0-dev16, dan androidx.compose.material:material-icons-extended:0.1.0-dev16 dirilis. Versi 0.1.0-dev16 berisi commit berikut.

Perubahan API

  • Warna kini merupakan class final, bukan antarmuka. Daripada memperluas dan menyediakan implementasi kustom, Anda sebaiknya membuat suasana baru untuk objek tema khusus dan mengakses objek tema melalui suasana baru di komponen Anda, mirip dengan cara kerja MaterialTheme secara internal. (Ibae84)
  • Nama ColorPalette diganti menjadi Colors, untuk memetakan sistem warna Material dengan lebih baik dan menghilangkan kebingungan terkait ColorPalette menjadi objek bertema 'generik', bukan implementasi khusus sistem warna Material. Selain itu, nama lightColorPalette dan darkColorPalette diganti menjadi lightColors dan darkColors. (I9e976, b/161812111)
  • Mengganti nama parameter text BottomNavigationItem menjadi label, onSelected menjadi onSelect, activeColor menjadi selectedContentColor, inactiveColor menjadi unselectedContentColor, dan memperbarui urutan parameter agar cocok dengan panduan. (Icb605, b/161809324)
  • Modifier.stateDraggable sepenuhnya diperbaiki dan diganti namanya menjadi Modifier.swipeable. Class SwipeableState baru sudah diperkenalkan, serta DrawerState dan BottomDrawerState difaktorkan ulang untuk mewarisi class tersebut. [Modal/Bottom]DrawerLayout tidak lagi menggunakan parameter onStateChange. (I72332, b/148023068)
  • Paket foundation.shape.corner diratakan menjadi foundation.share (I46491, b/161887429)
  • Menambahkan anotasi ExperimentalMaterialApi. RippleTheme ditandai sebagai Experimental (IC5fa0, b/161784800)
  • Nama Material FillingTextField diganti menjadi TextField dan nama TextField dasar diganti menjadi BaseTextField, agar API paling sederhana yang diinginkan mudah ditemukan dan digunakan (Ia6242, b/155482676)

Perbaikan Bug

  • OnChildPositioned tidak digunakan lagi. Sebagai gantinya, gunakan OnPositioned pada turunan. (I87f95, b/162109766)
  • Mengatasi masalah API umum (I077bc)
    1. Menghapus antarmuka OffsetBase yang tidak digunakan
    2. Meratakan class Offset dan IntOffset agar memiliki tampilan API yang konsisten
    3. Mengganti nama IntOffset.Origin menjadi IntOffset.Zero agar konsisten dengan API Offset
    4. Memindahkan metode nativeCanvas dari antarmuka Canvas untuk mendukung konsumen membuat instance Canvas mereka sendiri
    5. Membuat class EmptyCanva stub untuk memfaktorkan ulang DrawScope menjadi parameter non-null, bukan lateinit, dan memastikan non-nullability pada kolom
    6. Mengganti nama enum ClipOp menjadi Pascal Case
    7. Mengganti nama enum FilterQuality menjadi Pascal Case
    8. Mengganti nama enum StrokeJoin menjadi Pascal Case
    9. Mengganti nama enum PointMode menjadi Pascal Case
    10. Mengganti nama enum PaintingStyle menjadi Pascal Case
    11. Mengganti nama enum PathFillType menjadi Pascal Case
    12. Mengganti nama enum StrokeCap menjadi Pascal Case
    13. Memperbarui implementasi DrawCache agar tidak lagi menggunakan parameter lateinit
    14. Memperbarui DrawScope agar tidak lagi menggunakan delegasi lambat untuk parameter internal fillPaint dan strokePaint
    15. Memperbarui Gambar yang dapat disusun untuk menghindari penggunaan Box untuk overhead yang lebih rendah
    16. Memperbarui class Outline agar memiliki anotasi @Immutable
    17. Memperbarui PathNode agar memiliki anotasi @Immutable untuk setiap petunjuk jalur
    18. Memperbarui subkomposisi Vektor untuk menghapus pemeriksaan persamaan bersyarat yang berlebihan karena compose sudah menanganinya
    19. Metode konstruktor pendamping Rect tidak digunakan lagi dan diganti dengan konstruktor fungsi
    20. Memperbarui class Brush dan konstruktor fungsi dengan API @Immutable dan @Stable
    21. Memperbarui enum VertexMode menjadi PascalCase
    22. Memperbarui metode DrawScope untuk menimpa parameter goresan secara bersyarat pada paint jika telah diubah
    23. Memperbarui Ukuran untuk menambahkan API destrukturisasi, mengganti nama UnspecifiedSize menjadi Unspecified dan menghapus metode yang tidak digunakan
  • Memindahkan dialog ke ui (I47fa6)
  • SemanticsNodeInteraction.performPartialGesture dihapus. Sebagai gantinya, gunakan SemanticsNodeInteraction.performGesture. (Id9b62)
  • Mengganti nama SemanticsNodeInteraction.getBoundsInRoot() menjadi SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafdf, b/161336532)
  • API untuk dukungan dari kanan ke kiri telah diupdate. Menambahkan LayoutDirectionAmbient yang bisa digunakan untuk membaca dan mengubah arah tata letak. Modifier.rtl dan Modifier.ltr telah dihapus. (I080b3)
  • Nama Modifier.deternimateProgress telah diganti menjadi Modifier.progressSemantics (I9c0b4)
  • Memperbarui ikon material-diperluas dengan ikon terbaru yang ditambahkan ke Material.io/icons (I4b1d3)
  • Memerlukan jenis T agar ditentukan secara eksplisit untuk transitionDefinition. (I1aded)
  • Modifier.plus tidak digunakan lagi. Sebagai gantinya, gunakan Modifier.then. 'Then' memiliki sinyal pengurutan yang lebih kuat, serta melarang pengetikan Modifier.padding().background() + anotherModifier yang memutus rantai dan lebih sulit dibaca (Iedd58, b/161529964)
  • Mengganti nama AndroidComposeTestRule menjadi createAndroidComposeRule. (I70aaf)
  • Menambahkan SemanticsMatcher isFocused() dan isNotFocused(). (I0b760)
  • Menghapus BaseGestureScope.globalBounds, yang tidak boleh digunakan dari pengujian. Menggunakan koordinat lokal ke node tempat Anda berinteraksi. (Ie9b08)
  • Memperbaiki posisi pop-up pada tampilan terpotong. (Idd7dd)
  • Nama Modifier.drawBackground telah diganti menjadi Modifier.background (I13677)

Versi 0.1.0-dev15

22 Juli 2020

androidx.compose.material:material:0.1.0-dev15, androidx.compose.material:material-icons-core:0.1.0-dev15, dan androidx.compose.material:material-icons-extended:0.1.0-dev15 dirilis. Versi 0.1.0-dev15 berisi commit berikut.

Update Dependensi

  • Untuk menggunakan Compose versi 0.1.0-dev15, Anda harus memperbarui dependensi sesuai dengan cuplikan kode baru yang ditampilkan di atas dalam Mendeklarasikan dependensi.

Perubahan API

  • Anotasi @Model kini tidak digunakan lagi. Gunakan status dan mutableStateOf sebagai alternatif. Keputusan penghentian ini tercapai setelah diskusi yang dilakukan secara saksama.

    Pembenaran

    Alasan mencakup, tetapi tidak terbatas pada:

    • Mengurangi konsep dan area permukaan API yang perlu diajari
    • Lebih selaras dengan toolkit lainnya yang dapat dibandingkan (Swift UI, React, Flutter)
    • Keputusan yang reversibel. Kami dapat selalu mengembalikan @Model di lain waktu.
    • Meniadakan penggunaan corner-case dan pertanyaan yang sulit dijawab tentang mengonfigurasi @Model sebagai hal-hal yang perlu ditangani
    • Class data @Model, sama dengan, kode hash, dll.
    • Bagaimana cara membuat beberapa properti "diamati" dan yang lainnya tidak?
    • Bagaimana cara menentukan kesetaraan struktural vs. referensi untuk digunakan dalam pengamatan?
    • Mengurangi "magic" di dalam sistem. Akan mengurangi kemungkinan seseorang menganggap sistem lebih cerdas dari seharusnya (contoh, mengetahui cara membedakan daftar)
    • Membuat perincian pengamatan lebih intuitif.
    • Meningkatkan kemampuan pemfaktoran ulang dari variabel -> properti pada class
    • Berpotensi membuka kemungkinan untuk melakukan pengoptimalan khusus Status secara manual
    • Lebih selaras dengan bagian ekosistem lainnya dan mengurangi ambiguitas terhadap status yang tidak dapat diubah atau kami “menerapkan status yang dapat diubah”

    Catatan Migrasi

    Hampir semua penggunaan @Model yang sudah ada telah diubah dengan baik menggunakan salah satu dari dua cara. Contoh di bawah ini menampilkan class @Model dengan dua properti hanya untuk keperluan contoh, dan menunjukkan class tersebut saat sedang digunakan dalam fungsi yang dapat dikomposisi.

    @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 }
     )
    }
    

    Alternatif 1: Gunakan State<OriginalClass> dan buat salinan.

    Pendekatan ini dibuat lebih mudah dengan class data Kotlin. Intinya, buat semua properti var sebelumnya menjadi properti val pada class data, kemudian gunakan state sebagai ganti dari remember, lalu tetapkan nilai status ke salinan clone aslinya menggunakan metode praktis copy(...) class data.

    Penting untuk diperhatikan bahwa pendekatan ini hanya berfungsi saat satu-satunya mutasi ke class tersebut dilakukan dalam cakupan yang sama tempat instance State dibuat. Jika class secara internal bermutasi sendiri di luar cakupan penggunaan tersebut, dan Anda mengandalkan pengamatannya, maka gunakan pendekatan berikutnya.

    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) }
     )
    }
    

    Alternatif 2: Gunakan mutableStateOf dan delegasi properti

    Pendekatan ini dibuat lebih mudah dengan delegasi properti Kotlin dan mutableStateOf API yang memungkinkan Anda membuat instance MutableState di luar komposisi. Intinya, ganti semua properti var dari class asal menggunakan properti var dengan mutableStateOf sebagai delegasi propertinya. Hal ini memiliki keuntungan bahwa penggunaan class tidak akan berubah sama sekali, kecuali implementasi internalnya. Perilaku ini tidak sepenuhnya identik dengan contoh aslinya, karena setiap properti saat ini diamati/berlangganan satu per satu, sehingga rekomposisi yang Anda lihat setelah pemfaktoran ulang berikut dapat menjadi lebih sempit (hal yang baik).

    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)

  • Nama callback onFocusChange di kolom teks diganti menjadi onFocusChanged (Ida4a1)

  • Menambahkan parameter ambang batas pada stateDraggable untuk menentukan ambang batas antara anchor. Ini digunakan untuk menetapkan ambang batas 56dp di panel samping bawah. Selain itu, BottomDrawerLayout kini menggunakan enum BottomDrawerState terpisah. (I533fa)

  • Menghapus Modifier.ripple yang sebelumnya tidak digunakan lagi. Clickable kini menggunakan ripple sebagai indikasi default (jika Anda memiliki MaterialTheme {} yang disetel di aplikasi Anda) sehingga pada umumnya, Anda cukup menggunakan clickable saja dan mendapatkan indikasi ripple secara gratis. Jika Anda perlu menyesuaikan warna/ukuran/parameter terbatas untuk ripple, Anda dapat membuat RippleIndication secara manual dan meneruskannya ke clickable sebagai parameter indikasi. (I663b2, b/155375067)

  • Menghapus penggantian FilledTextField yang dapat dikomposisi dan tidak digunakan lagi (I7f8f8)

  • Mengganti nama objek Button (berisi default yang digunakan oleh fungsi Button) menjadi ButtonConstants (I7c5f7, b/160687878)

  • Slot konten Button kini berfungsi sebagai Row (berguna jika Anda harus memiliki ikon dengan teks, lihat contoh cara menulisnya di Button) (I0ff10, b/158677863)

  • RadioGroup dan RadioGroupItem tidak digunakan lagi. Gunakan Box dengan Modifier.selectable, Row, dan Column untuk menentukan kumpulan radioButton yang sesuai oleh desain Anda (I7f5cf, b/15455535)

  • Menambahkan Material Outlined Textfield (I1a518)

  • androidx.ui.foundation.TextFieldValue dan androidx.ui.input.EditorValue tidak digunakan lagi. Fungsi yang dapat dikomposisi TextField, FilledTextField, dan CoreTextField yang menggunakan tipe tersebut juga tidak digunakan lagi. Sebagai gantinya, gunakan androidx.ui.input.TextFieldValue (I4066d, b/155211005)

  • TabRow.TabPosition tidak berisi posisi di Dp, bukan di IntPx (I34a07, b/158577776).

  • Mengganti penggunaan IntPx dengan Int. Mengganti IntPxPosition dengan IntOffset. Mengganti IntPxSize dengan IntSize. (Ib7b44)

  • Untuk menggabungkan jumlah class yang digunakan untuk menyatakan informasi pengubahan ukuran, menstandarkan penggunaan class Size, bukan PxSize. Tindakan ini memberikan manfaat dari class inline untuk menggunakan 2 nilai float yang panjang untuk dipaketkan untuk menyatakan lebar dan tinggi yang dinyatakan sebagai float. (Ic0191)

  • Menghentikan penggunaan Modifier.ripple. Clickable kini menggunakan ripple sebagai indikasi default (jika Anda memiliki MaterialTheme {} yang disetel di aplikasi Anda) sehingga pada umumnya, Anda cukup menggunakan clickable saja dan mendapatkan indikasi ripple secara gratis. Jika Anda perlu menyesuaikan warna/ukuran/parameter terbatas untuk ripple, Anda dapat membuat RippleIndication secara manual dan meneruskannya ke clickable sebagai parameter indikasi. (I101cd, b/155375067)

  • Scaffold API telah dibuat ulang: beberapa parameter telah berubah namanya, menambahkan parameter baru untuk penyesuaian yang lebih baik. Menambahkan pengambil ke ukuran kueri Fab, TopBar, dan BottomBar (I0e7ce)

  • Menambahkan komponen DropdownMenu di ui-material, untuk implementasi menu Desain Material. (I9bb3d)

  • Mengizinkan penampilan/penyembunyian keyboard virtual secara manual menggunakan SoftwareKeyboardController (Ifb9d6, b/155427736)

  • Modifier.indication telah ditambahkan ke paket dasar. Gunakan API tersebut untuk menampilkan indikator tekan/tarik/lainnya pada elemen khusus yang digunakan untuk berinteraksi (I8425f, b/155287131)

  • Menggabungkan implementasi CanvasScope sehingga hanya terdapat DrawScope dan ContentDrawScope Mengganti nama CanvasScope ke DrawScope. Mengupdate DrawScope untuk menerapkan antarmuka Density dan menyediakan subclass LayoutDirection Menghapus subclass DrawScope di ContentDrawScope Painter dan PainterModifier telah diupdate untuk tidak lagi mempertahankan properti RTL sendiri karena DrawScope menyediakan ini tanpa menyediakannya secara manual (I1798e)

  • Nama Emphasis.emphasize() berganti menjadi Emphasis.applyEmphasis() (Iceebe)

  • Desain tombol yang tidak aktif kini mengikuti spesifikasi Desain Material (I47dcb, b/155076924)

  • FilledTextField mendapatkan tindakan ime, transformasi visual, dan dukungan jenis keyboard (I1f9cf, b/155075201)

  • Menambahkan parameter strokeWidth ke CircularProgressIndicator untuk menyesuaikan ukuran goresan. Untuk mengubah ukuran goresan (tinggi) LinearProgressIndicator, Anda dapat menggunakan Modifier.preferredHeight() atau pengubah ukuran lainnya. (Icea16, b/154919081)

  • Menambahkan parameter strokeWidth ke CircularProgressIndicator untuk menyesuaikan ukuran goresan. Untuk mengubah ukuran goresan (tinggi) LinearProgressIndicator, Anda dapat menggunakan Modifier.preferredHeight() atau pengubah ukuran lainnya. (Icea16, b/154919081)

  • Menambahkan slot API untuk ikon awal dan ikon akhir pada FillingTextField dan penanganan status error-nya (Ic12e0)

  • Warna default FAB dan FAB yang Diperpanjang telah diubah menjadi MaterialTheme.colors.secondary. (I3b9b9, b/154118816)

  • Mengganti semua penggunaan Color nullable di API dengan non-nullable dan menggunakan Color.Unset, bukan null (Iabaa7)

  • Mengganti nama EdgeInsets menjadi InnerPadding. Mengganti parameter innerPadding dari Material Buttons menjadi padding. (I66165)

  • Penggeser sekarang bersifat stateless. Pengguna perlu meneruskan dan memperbarui statusnya sendiri, seperti halnya pada kontrol lainnya. (Ia00aa)

  • StaticDrawer telah dihapus. Jika Anda membutuhkannya, gunakan Box dengan lebar yang ditentukan material sebagai gantinya (I244a7)

  • Menambahkan implementasi Desain Material dari Kolom Teks yang Terisi (Ic75cd)

  • Menambahkan param pengubah ke ListItem dan mengurutkan ulang param untuk mempromosikan isi lambda di akhir (I66e21)

  • Menambahkan parameter konstruktor defaultFontFamily ke Typography, memungkinkan penetapan jenis font default yang akan digunakan untuk TextStyles yang disediakan yang tidak memiliki rangkaian jenis. (I89d07)

  • Menghapus Tabel Data Material untuk sementara dari antarmuka API. (Iaea61)

  • Nama parameter diganti dalam Divider yang dapat dikomposisi (IC4373)

  • turunan (Ia6d19)

  • Menghapus MaterialTheme.emphasisLevels, bukan menggunakan EmphasisAmbient.current untuk mengambil tingkat penekanan (Ib5e40)

  • Sistem bertema bentuk telah diperbarui berdasarkan spesifikasi desain Material. Sekarang Anda dapat menyediakan bentuk kecil, sedang, dan besar untuk digunakan oleh sebagian besar komponen (Ifb4d1)

  • Mengubah MaterialTheme API seperti MaterialTheme.colors(), MaterialTheme.typography() menjadi properti, bukan fungsi. Menghapus tanda kurung dari panggilan yang ada, tidak ada perubahan perilaku yang diharapkan. (I3565a)

  • FloatingActionButton API yang telah difaktorkan ulang untuk menerima lambda yang dapat dikomposisi, bukan primitive. Lihat contoh terbaru untuk informasi penggunaan. (I00622)

  • Menambahkan param enabled ke Checkbox, Switch, dan Toggleable I41c16)

  • Ripple kini menjadi Modifier. Meskipun Clickable belum dikonversi, penggunaan yang direkomendasikan adalah Clickable(onClick = { ... }, modifier = ripple()) (Ie5200, b/151331852, b/150060763)

  • Surface dan Card dipindahkan dari androidx.ui.material.surface ke androidx.ui.material (I88a6d, b/150863888)

  • Button, FloatingActionButton, dan Clickable kini memiliki param enabled tersendiri. Beberapa param pada Button telah diganti namanya atau disusun ulang. (I54b5a)

  • Mengganti nama Image menjadi ImageAsset agar dapat membedakan dengan jelas data Image dan Image yang dapat disusun mendatang yang digunakan untuk menyusun tata letak dan konten gambar. Metode ekstensi dibuat di android.graphics.Bitmap, Bitmap.asImageAsset(), untuk membuat instance ImageAsset yang berguna untuk menggabungkan pengembangan aplikasi Android tradisional dengan framework compose (Id5bbd)

  • Snackbar API dengan parameter String telah dihapus, karena telah digantikan dengan overload yang menerima lambda yang dapat dikomposisi. Lihat contoh terbaru untuk mengetahui informasi penggunaan (I55f80)

  • Tab API telah difaktorkan ulang untuk menerima lambda text dan icon (Ia057e)

  • Komponen BottomNavigation telah ditambahkan, lihat dokumen dan contoh untuk mengetahui informasi penggunaannya (I731a0)

  • Menambahkan Icon, IconButton, dan IconToggleButton, serta menghapus AppBarIcon. Anda dapat langsung mengganti penggunaan AppBarIcon yang ada dengan IconButton, dan target sentuhnya akan menjadi benar. Lihat contoh untuk mengetahui informasi penggunaan, dan lihat Ikon untuk Ikon Material yang telah tersedia yang dapat Anda gunakan secara langsung dengan komponen ini. (I96849)

  • Mengganti ButtonStyle dengan fungsi yang berbeda dan penghapusan kelebihan beban pada teks (string). Lihat contoh terbaru untuk informasi penggunaan. (If63ab, b/146478620, b/146482131)

  • Mengganti nama pengubah Border menjadi DrawBorder (I8ffcc)

  • LayoutCoordinates tidak lagi memiliki properti posisi. Properti posisi tidak berfungsi saat mempertimbangkan LayoutModifiers, rotasi, atau penskalaan. Sebagai gantinya, developer sebaiknya menggunakan parentCoordinates dan childToLocal() untuk menghitung transformasi dari suatu LayoutCoordinate ke yang lainnya.

    LayoutCoordinates menggunakan IntPxSize untuk properti ukuran, bukan PxSize. Layouts menggunakan ukuran piksel bilangan bulat untuk tata letak, sehingga semua ukuran tata letak harus menggunakan bilangan bulat dan bukan nilai floating point. (I9367b)

  • Perubahan yang dapat menyebabkan gangguan pada API ambien. Lihat log dan dokumentasi Ambient<T> untuk detail selengkapnya (I4c7ee, b/143769776)

  • Komponen material Scaffold telah ditambahkan. Scaffold mengimplementasikan (I7731b)

  • DrawBorder diganti dengan Border Modifier (Id335a)

Perbaikan Bug

  • FocusModifier tidak digunakan lagi dan digantikan oleh Modifier.focus, Modifier.focusRequester, Modifier.focusObserver. FocusState dan FocusDetailedState tidak digunakan lagi dan digantikan dengan FocusState2 (I46919, b/160822875, b/160922136)
  • VerticalScroller dan HorizontalScroller tidak lagi digunakan. Gunakan ScrollableColumn dan ScrollableRow untuk pengalaman bawaan dengan parameter dan perilaku Column/Row, atau Modifier.verticalScroll dan Modifier.horizontalScroll pada elemen Anda sendiri. Demikian pula, ScrollerPosition tidak digunakan lagi untuk mendukung ScrollState' (I400ce, b/157225838, b/149460415, b/154105299)
  • API Modifier.draggable dan Modifier.scrollable telah dikerjakan ulang. DragDirection telah dihapus untuk mendukung Orientation. Status yang diperlukan untuk dapat di-scroll telah disederhanakan. Nama ScrollableState telah diganti menjadi ScrollableController (Iab63c, b/149460415)
  • Nama runOnIdleCompose diganti menjadi runOnIdle (I83607)
  • Properti semantik satu nilai sekarang menggunakan gaya pemanggilan. Misalnya, 'semantics { hidden = true }' sekarang ditulis sebagai: 'semantics { hidden() }'. (Ic1afd, b/145951226, b/145955412)
  • Beberapa nama API pengujian diganti menjadi lebih intuitif. Semua nama API findXYZ diganti menjadi onNodeXYZ. Semua nama API doXYZ diganti menjadi performXYZ. (I7f164)
  • Transition API telah diubah untuk mengembalikan TransitionState, bukan meneruskan TransitionState ke turunan. Hal ini membuat API lebih konsisten dengan API animate(). (I24e38)
  • Class unit IntBounds telah ditambahkan dan mewakili batas piksel bilangan bulat dari tata letak. API PopupPositionProvider telah diupdate untuk menggunakannya. (I0d8d0, b/159596546)
  • Sebuah flag opsional baru useUnmergedTree telah ditambahkan ke pencari pengujian. (I2ce48)
  • Menghapus API pengujian ukuran yang tidak digunakan lagi. (Iba0a0)
  • Menghapus class inline Shader yang menggabungkan class expect NativeShader. Mengganti nama NativeShader menjadi Shader. Class inline Shader yang digabungkan tidak menambahkan apa pun yang berharga ke permukaan API dan merupakan class inline, jadi gunakan class NativeShader secara langsung. (I25e4d)
  • Pop-ups, Dialogs, dan Menus sekarang mewarisi MaterialTheme kontekstual (Ia3665, b/156527485)
  • DropdownMenu material kini dapat di-scroll. (Ide699)
  • Menghapus parameter arah tata letak dari blok ukuran fungsi Layout(). Namun, arah tata letak tersedia di dalam callback melalui objek cakupan pengukuran (Ic7d9d)
  • Gunakan AnimationSpec, bukan AnimationBuilder di API level atas untuk memperjelas konsep spesifikasi animasi statis -Meningkatkan DSL transisi dengan menghapus persyaratan lambda untuk membuat AnimationSpec seperti tween, spring. Sebaliknya, API mengambil parameter konstruktor secara langsung. -Meningkatkan kemudahan penggunaan AnimationSpec secara keseluruhan yang membuka konstruktor, bukan mengandalkan builder -Mengubah durasi dan penundaan untuk KeyFrames dan Tween menjadi Int. Tindakan ini menghilangkan tipe transmisi yang tidak perlu dan overloading metode (untuk mendukung Long dan Int). (Ica0b4)
  • Tombol akses sekarang muncul dalam status nonaktif saat enabled ditetapkan ke false (If4624, b/155941869, b/159331694)
  • Nama Modifier.tag diganti menjadi Modifiers.layoutId untuk menghindari kebingungan dengan Modifier.testTag. (I995f0)
  • Posisi Int baris perataan yang ditampilkan dari Placeable#get(AlignmentLine) sekarang tidak null. Jika baris perataan kueri tidak ada, AlignmentLine.Unspecified akan ditampilkan. (I896c5, b/158134875)
  • Memfaktorkan ulang class Radius untuk menjadi class inline. Menghapus metode pembuatan pengiring yang mendukung konstruktor fungsi dengan parameter default agar memiliki radius sepanjang sumbu y yang cocok dengan parameter radius sumbu x wajib.

    Mengupdate DrawScope.drawRoundRect agar dapat menggunakan parameter Radius tunggal, bukan 2 nilai float terpisah untuk radius di sepanjang sumbu x dan y (I46d1b)

  • Untuk menggabungkan jumlah class yang digunakan untuk menyatakan informasi pemosisian, menstandarkan penggunaan class Offset, bukan PxPosition. Tindakan ini memberikan manfaat dari class inline untuk menggunakan 2 nilai float yang panjang untuk dipaketkan untuk menyatakan offset x dan y yang dinyatakan sebagai float. (I3ad98)

  • Mengganti penggunaan class Px di berbagai class compose sebagai bagian dari upaya pemfaktoran ulang besar-besaran agar hanya mengandalkan jenis primitif dan Dp untuk parameter piksel. Menghapus class Px secara keseluruhan (I3ff33)

  • Komponen yang dapat dialihkan tidak digunakan lagi. Sebagai gantinya, gunakan Modifier.toggleable (I35220, b/157642842)

  • Mengganti penggunaan class Px dalam berbagai class compose sebagai bagian dari upaya pemfaktoran ulang yang besar-besaran agar hanya mengandalkan jenis primitive dan Dp untuk parameter piksel (I086f4)

  • Mengganti penggunaan class Px di berbagai class compose sebagai bagian dari upaya pemfaktoran ulang besar-besaran agar hanya mengandalkan jenis primitif dan Dp untuk parameter piksel (Id3434)

  • Mengganti penggunaan class Px dalam berbagai class compose sebagai bagian dari upaya pemfaktoran ulang besar-besaran agar hanya mengandalkan jenis primitive dan Dp untuk parameter piksel (I97a5a)

  • Memperbaiki onClick yang tidak dipanggil untuk DropdonMenuItems. (I3998b, b/157673259)

  • MutuallyExclusiveSetItem tidak digunakan lagi. Sebagai gantinya, gunakan Modifier.selectable. (I02b47, b/157642842)

  • TestTag sekarang tidak digunakan lagi. Sebagai gantinya, gunakan Modifier.testTag. (If5110, b/157173105).

  • Kursor TextField memiliki animasi berkedip (Id10a7)

  • Mengganti penggunaan class Px di berbagai class compose sebagai bagian dari upaya pemfaktoran ulang besar-besaran agar hanya mengandalkan jenis primitif dan Dp untuk parameter piksel (I19d02)

  • VerticalScroller sekarang menyediakan Kolom dari kotak. HorizontalScroller sekarang menyediakan Baris dari kotak. (Ieca5d, b/157020670)

  • Mengganti penggunaan kelas Px dalam berbagai class compose sebagai bagian dari upaya pemfaktoran ulang yang besar-besaran guna hanya mengandalkan jenis primitive dan Dp untuk parameter piksel (Ieda0b)

  • Modifier.semantics sudah tidak digunakan lagi untuk memungkinkan penggunaan komponen tingkat tinggi. (I4cfdc)

  • API pengubah DrawLayer telah diubah: nama outlineShape diganti untuk membentuk dan memiliki nilai default RectangleShape, serta kini tidak dapat dinolkan; nama clipToOutline diganti menjadi clip; clipToBounds dihapus karena sama dengan clip == true dengan RectangleShape (I7ef11, b/155075735)

  • Mengupdate API compose dengan level yang lebih tinggi yang mengekspos Canvas untuk mengekspos CanvasScope. Tindakan ini akan menghapus keperluan konsumen untuk mengelola objek Paint-nya. Bagi konsumen yang masih memerlukan akses ke Canvas, mereka dapat menggunakan metode ekstensi drawCanvas yang menyediakan callback untuk mengeluarkan perintah menggambar menggunakan Canvas yang mendasarinya. (I80afd)

  • AlignmentLineOffset yang dapat disusun sudah tidak digunakan lagi, sebagai gantinya harap gunakan pengubah relativePaddingFrom(). CenterAlignmentLine yang dapat disusun telah dihapus. (I60107)

  • API lambda akhir WithConstraints telah diubah. Sekarang, sebagai ganti dua parameter, memiliki cakupan penerima yang merupakan tambahan untuk batasan dan layoutDirection menyediakan properti minWidth, maxWidth, minHeight, dan maxHeight di Dp (I91b9a, b/149979702)

  • Menambahkan pengubah tata letak defaultMinSizeConstraints yang menentukan batasan ukuran ke tata letak gabungan saja saat batasan tersebut belum ditentukan (0 untuk batasan minimal dan tidak terbatas untuk batasan maksimal). (I311ea, b/150460257)

  • FocusManagerAmbient dihapus. Gunakan FocusModifier.requestFocus untuk mendapatkan fokus. (Ic4826)

  • Membuat CanvasScope API yang menggabungkan objek Canvas untuk mengekspos antarmuka API gambar yang deklaratif dan stateless. Transformasi disertakan dalam cakupan penerimanya sendiri dan informasi pengubahan ukuran juga mencakup batas inset yang sesuai. Ini tidak mengharuskan konsumen untuk mempertahankan state object Paint-nya sendiri dalam mengonfigurasi operasi gambar.

    Menambahkan CanvasScopeSample serta mengupdate aplikasi demo guna menyertakan Demo grafis deklaratif (Ifd86d)

  • Tambahkan penyesuaian warna kursor ke TextField (I6e33f)

  • Sekarang TextFieldValue yang digunakan dengan TextField dapat mempertahankan rekreasi aktivitas saat digunakan seperti ini: var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() } (I5c3ce, b/155075724)

  • Nama LayoutModifier2 diganti menjadi LayoutModifier. (Id29f3)

  • Menghapus antarmuka LayoutModifier yang sudah tidak digunakan lagi. (I2a9d6)

  • Mengganti parameter focusIdentifier CoreTextField/TextField dengan FocusNode untuk diintegrasikan dengan subsistem fokus. (I7ea48)

  • Fungsi pengukuran intrinsik di Layout dan LayoutModifier2 kini memiliki penerima IntrinsicMeasureScope yang memberikan API kueri instrinsik dengan arah tata letak yang disebarkan secara implisit. (Id9945)

  • Modifier.zIndex() baru ditambahkan untuk mengontrol urutan gambar turunan dalam tata letak induk yang sama. Properti elevasi pada DrawLayerModifier diganti namanya menjadi shadowElevation dan tidak lagi mengontrol urutan gambar. Urutan parameter DrawShadow diubah: elevasi kini menjadi yang pertama dan bentuknya adalah yang kedua dengan default RectangleShape. (I20150, b/152417501)

  • RectangleShape dipindahkan dari androidx.ui.foundation.shape.* ke androidx.ui.graphics.* (Ia74d5, b/154507984)

  • Mengupdate TextField API agar menggabungkan callback onFocus dan onBlur ke dalam callback onFocusChange(Boolean) tunggal dengan parameter (I66cd3)

  • Menambahkan parameter verticalGravity dan horizontalGravity ke Row dan Column. (I7dc5a)

  • Memperbarui wrapContentWidth dan wrapContentHeight untuk mengharapkan Alignment vertikal atau horizontal, bukan sembarang Alignment. Pengubah gravitasi diperbarui untuk menerima Alignment vertikal atau horizontal. Row, Column, dan Stack telah diperbarui untuk mendukung Alignment berkelanjutan khusus. (Ib0728)

  • Membuat PixelMap API untuk mendukung kueri informasi piksel dari ImageAsset. (I69ad6)

  • Menghapus ProvideContentColor, sebagai gantinya cukup gunakan ContentColorAmbient langsung dengan Providers (Iee942)

  • Nama modul ui-text-compose diganti menjadi ui-text. sekarang ui-text berisi fungsi yang dapat dikomposisi CoreText dan CoreTextField (Ib7d47)

  • Nama modul ui-text diganti menjadi ui-text-core (I57dec)

  • Memindahkan ui-framework/CoreText, CoreTextField yang dapat dikomposisi di bawah ui-text-compose. Anda mungkin ingin menyertakan ui-text-compose dalam project Anda. (I32042)

  • Menyempurnakan DrawModifier API:

    • Membuat cakupan penerima untuk draw() ContentDrawScope
    • Menghapus semua parameter pada draw()
    • DrawScope memiliki antarmuka yang sama dengan CanvasScope
    • ContentDrawScope memiliki metode drawContent() (Ibaced, b/152919067)
  • Sekarang runOnIdleCompose dan runOnUiThread menjadi fungsi global, bukan metode di ComposeTestRule. (Icbe8f)

  • Operator delegasi properti [Mutable]State dipindahkan ke ekstensi untuk mendukung pengoptimalan delegasi properti Kotlin 1.4. Pemanggil harus menambahkan impor untuk terus menggunakan by state { ... } atau by mutableStateOf(...). (I5312c)

  • Menambahkan positionInParent dan boundsInParent untuk LayoutCoordinates. (Icacdd, b/152735784)

  • ColoredRect tidak digunakan lagi. Sebagai gantinya, gunakan Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731)

  • Nama LayoutResult diganti menjadi MeasureResult. (Id8c68)

  • Menambahkan LayoutModifier2, API baru untuk menentukan pengubah tata letak; LayoutModifier yang tidak digunakan lagi (If32ac)

  • Penggantian operator Modifier plus dengan fungsi ekstensi pabrik (I225e4)

  • Draggable telah dipindahkan ke pengubah (Id9b16, b/151959544)

  • Fungsi yang dapat dikomposisi ParentData tidak digunakan lagi. Sebaiknya buat pengubah yang mengimplementasikan antarmuka ParentDataModifier, atau gunakan pengubah LayoutTag jika Anda hanya perlu memberi tag turunan tata letak agar dapat mengenalinya di dalam blok pengukuran. (I51368, b/150953183)

  • Fungsi yang dapat dikomposisi Center tidak digunakan lagi. Center ini harus diganti baik dengan pengubah LayoutSize.Fill + LayoutAlign.Center maupun dengan salah satu fungsi yang dapat dikomposisi Box atau Stack dengan pengubah yang sesuai diterapkan (Idf5e0)

  • Menambahkan VectorPainter API untuk menggantikan API subkomposisi yang ada untuk grafik vektor. Hasil subkomposisi adalah objek VectorPainter, bukan DrawModifier. Penggunaan DrawVector yang dapat dikomposisi sebelumnya tidak digunakan lagi dan diganti dengan VectorPainter.

    Nama Image(Painter) API menjadi PaintBox(Painter) Membuat fungsi yang dapat dikomposisi Vector yang berfungsi seperti fungsi yang dapat dikomposisi Image kecuali dengan VectorAsset bukan ImageAsset (I9af9a, b/149030271)

  • Mengganti nama LayoutFlexible menjadi LayoutWeight. Mengganti nama parameter tight menjadi fill. (If4738)

  • RepaintBoundary dihapus dan digantikan dengan DrawLayerModifier (I00aa4)

  • DrawVector telah diubah dari fungsi yang dapat dikomposisi reguler menjadi menampilkan drawVector() Modifier yang akan menggambar vektor sebagai latar belakang dari suatu tata letak. (I7b8e0)

  • Fungsi yang dapat dikomposisi Opacity telah diganti dengan pengubah drawOpacity. (I5fb62)

  • Mengganti Clip fungsi yang dapat dikomposisi dengan drawClip() pengubah. DrawClipToBounds adalah pengubah yang dapat digunakan dengan mudah saat Anda hanya perlu menyesuaikan batas layer yang memiliki bentuk persegi panjang. (If28eb)

  • Mengganti fungsi yang dapat dikomposisi DrawShadow dengan pengubah drawShadow(). Sekarang bayangan digambar sebagai bagian dari LayerModifier. (I0317a)

  • Menambahkan LayerModifier, pengubah yang mengizinkan penambahan RenderNode untuk Layout. Pengubah tersebut memungkinkan pengaturan clipping, opasitas, rotasi, penskalaan, dan bayangan. Ini akan menggantikan RepaintBoundary. (I7100d, b/150774014)

  • androidx.compose.ViewComposer telah dipindahkan ke androidx.ui.node.UiComposer androidx.compose.Emittable telah dihapus. Berlebihan dengan ComponentNode. androidx.compose.ViewAdapters telah dihapus. Kasus penggunaannya sudah tidak didukung. Compose.composeInto sudah tidak digunakan lagi. Sebagai gantinya, gunakan setContent atau setViewContent. Compose.disposeComposition sudah tidak digunakan lagi. Sebagai gantinya, gunakan metode dispose pada Composition yang ditampilkan oleh setContent. androidx.compose.Compose.subcomposeInto telah dipindahkan ke androidx.ui.core.subcomposeInto Nama ComponentNode#emitInsertAt telah diganti menjadi ComponentNode#insertAt Nama ComponentNode#emitRemoveAt telah diganti menjadi ComponentNode#removeAt Nama ComponentNode#emitMode telah diganti menjadi ComponentNode#move (Idef00)

  • Membuat fungsi yang dapat dikomposisi Image untuk menangani pengubahan ukuran/tata letak selain menggambar ImageAsset tertentu ke layar. Fungsi yang dapat dikomposisi ini juga mendukung penggambaran semua instance Painter arbitrer yang berkaitan dengan ukuran intrinsiknya, serta mendukung ukuran yang telah ditetapkan atau ukuran minimumnya (Ibcc8f)

  • Wrap yang dapat dikomposisi sudah tidak digunakan lagi. Ini dapat diganti dengan pengubah LayoutAlign atau dengan Stack yang dapat dikomposisi (Ib237f)

  • WithConstraints mendapatkan parameter LayoutDirection (I6d6f7)

  • Membuat arah tata letak disebarkan dari node tata letak induk ke turunan. Menambahkan pengubah arah tata letak. (I3d955)

  • Tidak digunakan lagi: Draw yang dapat dikomposisi adalah sumber bug umum seperti (I78392, b/149827027)

  • Komponen stack mendukung arah kanan-ke-kiri (Ic9e00)

  • DrawShape yang dapat dikomposisi telah dihapus. Sebagai gantinya, gunakan pengubah DrawBackground. (I7ceb2)

  • Mendukung arah kanan-ke-kiri dalam pengubah LayoutPadding (I9e8da)

  • Menambahkan AdapterList, komponen daftar scroll yang hanya menyusun dan mengatur tata letak item yang terlihat. Saat ini, masalah yang diketahui mencakup vertikal saja dan tidak sepenuhnya menangani semua kasus perubahan pada turunannya. (Ib351b)

  • Memperbarui flag ComposeFlags.COMPOSER_PARAM menjadi true, yang akan mengubah strategi pembuatan kode untuk plugin compose. Pada tingkat tinggi, hal ini menyebabkan fungsi @Composable dibuat dengan parameter sintetik tambahan, yang akan diteruskan ke panggilan @Composable berikutnya agar runtime dapat mengelola eksekusi dengan benar. Ini adalah perubahan yang dapat menyebabkan gangguan biner yang signifikan, tetapi semestinya dapat menjaga kompatibilitas tingkat sumber pada semua penggunaan compose yang disetujui. (I7971c)

  • Komponen Canvas ditambahkan. Fungsi yang dapat dikomposisi dengan beberapa ukuran (disediakan oleh pengguna) dan Anda dapat menggambar menggunakan CanvasScope (I0d622)

  • Density dan DensityScope telah digabungkan dalam satu antarmuka. Sebagai ganti ambientDensity(), sekarang Anda dapat menggunakan DensityAmbient.current. Sebagai ganti withDensity(density), gunakan with(density) (I11cb1)

  • Mengubah LayoutCoordinates untuk membuat providedAlignmentLines menjadi Set, bukan Map; dan membuat LayoutCoordinates mengimplementasikan operator get(), bukan mengambil nilai. Hal ini mempermudah pengubah untuk mengubah satu atau beberapa nilai kumpulan tanpa membuat koleksi baru untuk setiap pengubah. (I0245a)

  • Sekarang, scroller menampilkan perilaku gerakan lempar pada Android native. (I922af, b/147493715)

  • Penyempurnaan pada antarmuka API Constraints (I0fd15)