UI

Berfungsi dengan library Jetpack Compose.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
1 Oktober 2020 - - - 1.0.0-alpha04

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 memiliki link ke setiap kumpulan catatan rilis.

GrupDeskripsi
compose.animationMem-build animasi di aplikasi Jetpack Compose untuk memperkaya pengalaman pengguna.
compose.compilerMentransformasi fungsi @Composable dan mengaktifkan pengoptimalan dengan plugin compiler Kotlin.
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 pada tingkat yang lebih tinggi untuk Compose, yang dirancang untuk menyediakan komponen yang cocok dengan yang dijelaskan di www.material.io.
compose.runtimeElemen penyusun yang penting untuk model pemrograman dan pengelolaan status Compose, serta runtime inti untuk ditarget Compose Compiler Plugin.
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 UI, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.

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

dependencies {
    // New dependencies
    implementation "androidx.compose.ui:ui-tooling:1.0.0-alpha08"
    implementation "androidx.compose.ui:ui-test:1.0.0-alpha08"

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

android {
    buildFeatures {
        compose true
    }

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

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

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 masalah yang sudah diketahui dalam library ini 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-alpha04

1 Oktober 2020

androidx.ui:ui-test:1.0.0-alpha04 dan androidx.ui:ui-tooling:1.0.0-alpha04 dirilis. Versi 1.0.0-alpha04 berisi commit berikut ini.

Perubahan API

  • Menambahkan fungsi penangguhan di ComposeTestRule untuk menunggu aplikasi yang tidak ada aktivitas (I4212c, b/168226343, b/168227042)
  • Menganotasi rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled dan textInputServiceFactory dengan @VisibleForTesting, menjadikannya API internal dan menyembunyikan kdoc (I554eb, b/168308412)

Perbaikan Bug

  • foundation.Box sudah tidak digunakan lagi. Sebagai gantinya, gunakan foundation.layout.Box. (Ie5950, b/167680279)
  • Stack diganti namanya menjadi Box. Box yang sudah ada sebelumnya tidak akan digunakan lagi sebagai ganti Box baru di compose.foundation.layout. Perilaku Box baru adalah untuk menumpuk turunan satu per satu jika ada beberapa turunan - ini berbeda dari Box sebelumnya, yang berperilaku mirip dengan Column. (I94893, b/167680279)
  • Parameter dekorasi box tidak digunakan lagi. Jika Anda ingin memiliki dekorasi/padding di box, gunakan Modifier (Modifier.background, Modifier.border, Modifier.padding) (Ibae92, b/167680279)
  • Mengupdate banyak Graphics API
    • Mengupdate DrawScope API ke metode transformasi tercakup untuk menunjukkan bahwa transformasi hanya diterapkan dalam callback dan dihapus setelah callback dipanggil
    • Memperbarui dokumentasi clipPath untuk merujuk ke Path, bukan persegi panjang bulat
    • Memperbaiki spasi dalam dokumentasi untuk parameter yang tepat di clipPath
    • Mengganti nama DrawScope.drawCanvas menjadi drawIntoCanvas dan menghapus parameter ukuran
    • Mengganti nama parameter dx/dy dalam metode inset menjadi horizontal dan vertikal
    • Menambahkan kelebihan inset yang memberikan nilai inset yang sama ke 4 batas
    • Menghapus dokumentasi tentang metode inset yang menunjukkan bahwa inset tersebut akan diterapkan ke 4 batas
    • Memperbarui dokumentasi untuk class Rect
    • Memperbarui komentar tentang parameter Rect agar cocok dengan gaya kdoc
    • Menghapus Rect.join dan Rect.expandToInclude
    • Membuat kelebihan untuk for Rect.translate(offset) dan Rect.shift yang tidak digunakan lagi
    • (If086a, b/167737376)
  • Menghapus parameter inlineContent dari Teks dengan input String. Ini tidak akan digunakan karena inlineContent harus berfungsi dengan AnnotatedString. (Ief403)

Versi 1.0.0-alpha03

16 September 2020

androidx.ui:ui-test:1.0.0-alpha03 dan androidx.ui:ui-tooling:1.0.0-alpha03 dirilis. Versi 1.0.0-alpha03 berisi commit berikut ini.

Perubahan API

  • Fungsi pengujian global seperti onNode atau waitForIdle kini tidak digunakan lagi, migrasikan ke fungsi barunya yang ditentukan di ComposeTestRule (I7f45a)
  • Memindahkan createAndroidComposeRule dan AndroidInputDispatcher dari androidx.ui.test.android ke androidx.ui.test (Idef08, b/164060572)
  • Menambahkan onNode dan metode global lainnya di ComposeTestRule karena metode global yang ada saat ini akan segera dihentikan. (Ieae36)
  • Memperbaiki penghitungan ukuran dan posisi di GestureScope, yang menyebabkan, diantaranya, gestur geser menjadi tidak valid (Iaf358, b/166589947)

Perbaikan Bug

  • Penggunaan gravitasi secara konsisten diganti namanya menjadi untuk meratakan atau perataan dalam API tata letak. (I2421a, b/164077038)
  • InnerPadding diganti namanya menjadi PaddingValues. (I195f1, b/167389171)

Versi 1.0.0-alpha02

2 September 2020

androidx.ui:ui-test:1.0.0-alpha02 dan androidx.ui:ui-tooling:1.0.0-alpha02 dirilis. Versi 1.0.0-alpha02 berisi commit berikut ini.

Perubahan API

  • TestUiDispatcher ditandai eksperimental (Iae99d, b/161247083)
  • Durasi kini menjadi class inline (I565eb)
  • Menambahkan ManualFrameClock.hasAwaiters untuk melihat apakah ada yang menunggu frame dari jam tersebut; runWithManualClock sebagai pengganti runBlocking saat menjalankan pengujian yang memerlukan ManualFrameClock; TestUiDispatcher.Main yang memberikan akses mudah ke dispatcher UI utama dalam pengujian Anda.

    Contoh:

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

    (I0a85b, b/161247083)

Perbaikan Bug

  • Konvensi pemanggilan untuk fungsi yang dapat dikomposisi telah berubah. Ini adalah perubahan yang dapat menyebabkan gangguan biner. Semua library harus dikompilasi ulang agar berfungsi dengan versi plugin compiler compose saat ini.

    Perubahan ini tidak membuat perubahan yang dapat menyebabkan gangguan tingkat sumber karena satu-satunya API yang telah berubah adalah API compiler yang memiliki keikutsertaan eksplisit. (I7afd2, b/158123185)

Versi 1.0.0-alpha01

26 Agustus 2020

androidx.ui:ui-test:1.0.0-alpha01 dan androidx.ui:ui-tooling:1.0.0-alpha01 dirilis. Versi 1.0.0-alpha01 berisi commit berikut ini.

Versi 0.1.0-dev

Versi 0.1.0-dev17

19 Agustus 2020

androidx.ui:ui-test:0.1.0-dev17 dan androidx.ui:ui-tooling:0.1.0-dev17 dirilis. Versi 0.1.0-dev17 berisi commit berikut.

Perubahan API

  • Offset telah menjadi class inline (Iaec70)
  • IntSize kini menjadi class inline (I2bf42)
  • AlertDialog kini menggunakan FlowRow untuk tombol (I00ec1, b/161809319, b/143682374)
  • Menambahkan fungsi createAndroidComposeRule yang menggunakan Class<T : ComponentActivity> sebagai parameter untuk membuat AndroidComposeRule dengan mudah yang diberikan class aktivitas tertentu. (I40da4)

Perbaikan Bug

  • Memperbarui nama PointerEventPass untuk rilis Alfa. (Ifda6f)
  • 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)
  • Memfaktorkan ulang susunan kode input pointer. (Ie3f45)
  • 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)
  • Memperbaiki error saat sesuatu yang menyimpan status sebelumnya digunakan di dalam for loop. Sekarang memiliki kunci yang sama di savedInstanceState() diizinkan, API UiSavedStateRegistry sekarang disesuaikan dengan persyaratan baru ini (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
  • 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)
  • Pengaturan spacedBy telah ditambahkan untuk Baris dan Kolom, guna memungkinkan penempatan tata letak anak dengan spasi tetap. Pengaturan yang disejajarkan juga ditambahkan untuk memungkinkan penempatan tata letak anak di samping yang lainnya dan disejajarkan dalam Baris/Kolom sesuai dengan Penyelarasan. Metode Arrangement.Vertical#arrange dan Arrangement.Horizontal#arrange sebelumnya tidak digunakan lagi, dan penulisan Pengaturan kustom tidak akan didukung di masa mendatang. (I6733d, b/161985975)
  • Modifier.drawBorder tidak digunakan lagi. Gunakan Modifier.border sebagai gantinya. Class data Border telah diganti dengan BorderStroke (I4257d, b/158160576)

Versi 0.1.0-dev16

5 Agustus 2020

androidx.ui:ui-test:0.1.0-dev16 dan androidx.ui:ui-tooling:0.1.0-dev16 dirilis. Versi 0.1.0-dev16 berisi commit berikut.

Sebagian besar paket Jetpack Compose telah difaktorkan ulang, sesuai dengan tabel di bawah.

Pemfaktoran Ulang Paket Jetpack Compose

Nama Paket Lama Nama Paket Baru
androidx.animation androidx.compose.animation.core
androidx.ui.autofill androidx.compose.ui.autofill
androidx.compose androidx.compose.runtime
androidx.compose.dispatch androidx.compose.runtime.dispatch
androidx.ui.animation androidx.compose.animation
androidx.ui.core androidx.compose.ui
androidx.compose.ui.unit
androidx.compose.ui.graphics
androidx.ui.foundation androidx.compose.foundation
androidx.ui.geometry androidx.compose.ui.geometry
androidx.ui.graphics androidx.compose.ui.graphics
androidx.ui.input androidx.compose.ui.text.input
androidx.ui.intl androidx.compose.ui.text.intl
androidx.ui.layout androidx.compose.foundation.layout
androidx.ui.livedata androidx.compose.runtime.livedata
androidx.ui.material androidx.compose.material
androidx.ui.material.icons androidx.compose.material.icons
androidx.ui.rxjava2 androidx.compose.runtime.rxjava2
androidx.ui.savedinstancestate androidx.compose.runtime.savedinstancestate
androidx.ui.node androidx.compose.ui.node
androidx.compose.ui.input.pointer
androidx.ui.platform androidx.compose.ui.platform
androidx.ui.res androidx.compose.ui.res
androidx.ui.semantics androidx.compose.ui.semantics
androidx.ui.testutils androidx.compose.ui.input.pointer
androidx.ui.text androidx.compose.foundation.text
androidx.compose.ui.text
androidx.ui.text.platform androidx.compose.ui.text.android
androidx.compose.ui.platform
androidx.ui.unit androidx.compose.ui.unit
androidx.ui.util androidx.compose.ui.util
androidx.ui.viewinterop androidx.compose.ui.viewinterop
androidx.ui.viewmodel androidx.compose.ui.viewinterop
Belum Difaktorkan Ulang (tidak ada perubahan)
androidx.ui.test
androidx.ui.tooling

Jika menggunakan Android Studio, Anda dapat mengganti pernyataan impor dengan cuplikan kode di bawah ini dan menggunakan tombol Optimize Imports di Android Studio. Untuk kasus yang tidak dicakup Android Studio, lihat daftar paket di atas.

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

Perubahan API

  • KeyEvent2 digantikan oleh KeyEvent (I2d770, b/162097585)
  • SemanticsNodeInteraction.performPartialGesture dihapus. Sebagai gantinya, gunakan SemanticsNodeInteraction.performGesture. (Id9b62)
  • Mengganti nama SemanticsNodeInteraction.getBoundsInRoot() menjadi SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafdf, b/161336532)
  • 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)
  • Meningkatkan akurasi API pemeriksa (I3cfbf)

Perbaikan Bug

  • Memindahkan dialog ke ui (I47fa6)
  • 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)
  • 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, sekaligus melarang pengetikan Modifier.padding().background() + anotherModifier yang memutus rantai dan lebih sulit dibaca (Iedd58, b/161529964)
  • Menambahkan SemanticsNode.positionInRoot untuk mendapatkan posisi SemanticsNode relatif terhadap root hierarki Compose (Icdf26, b/161336532)
  • Menambahkan tindakan aksesibilitas untuk mendapatkan TextLayoutResult (I9d6e6)
  • 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)
  • Nama Modifier.drawBackground telah diganti menjadi Modifier.background (I13677)
  • 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)
  • Paket foundation.shape.corner diratakan menjadi foundation.share (I46491, b/161887429)
  • Row dan Column kini berfungsi inline yang secara signifikan mengurangi overhead penggunaannya. (I75c10)

Versi 0.1.0-dev15

22 Juli 2020

androidx.ui:ui-test:0.1.0-dev15 dan androidx.ui:ui-tooling:0.1.0-dev15 dirilis. Versi 0.1.0-dev15 berisi commit berikut.

Sebagian besar artefak Jetpack Compose telah difaktorkan ulang, sesuai dengan tabel di bawah.

Harap diperhatikan, dalam rilis ini, hanya nama artefak yang telah difaktorkan ulang. Dalam rilis mendatang, nama paket akan diperbarui untuk mengikuti nama artefak barunya.

Pemfaktoran Ulang Artefak Jetpack Compose

Artefak Lama Artefak Baru
androidx.compose:compose-dispatch androidx.compose.runtime:runtime-dispatch
androidx.compose:compose-runtime androidx.compose.runtime:runtime
androidx.ui:ui-animation androidx.compose.animation:animation
androidx.ui:ui-animation-core androidx.compose.animation:animation-core
androidx.ui:ui-core androidx.compose.ui:ui
androidx.ui:ui-foundation androidx.compose.foundation:foundation
androidx.ui:ui-geometry androidx.compose.ui:ui-geometry
androidx.ui:ui-graphics androidx.compose.ui:ui-graphics
androidx.ui:ui-layout androidx.compose.foundation:foundation-layout
androidx.ui:ui-livedata androidx.compose.runtime:runtime-livedata
androidx.ui:ui-material androidx.compose.material:material
androidx.ui:ui-material-icons-core androidx.compose.material:material-icons-core
androidx.ui:ui-material-icons-extended androidx.compose.material:material-icons-extended
androidx.ui:ui-rxjava2 androidx.compose.runtime:runtime-rxjava2
androidx.ui:ui-saved-instance-state androidx.compose.runtime:runtime-saved-instance-state
androidx.ui:ui-text androidx.compose.foundation:foundation-text
androidx.ui:ui-text-android androidx.compose.ui:ui-text-android
androidx.ui:ui-text-core androidx.compose.ui:ui-text
androidx.ui:ui-unit androidx.compose.ui:ui-unit
androidx.ui:ui-util androidx.compose.ui:ui-util
Belum Difaktorkan Ulang (tidak ada perubahan)
androidx.compose:compose-compiler
androidx.ui:ui-test
androidx.ui:ui-tooling

Update Dependensi

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

Perubahan API

  • Nama runOnIdleCompose diganti menjadi runOnIdle (I83607)
  • Beberapa nama API pengujian diganti menjadi lebih intuitif. Semua nama API findXYZ diganti menjadi onNodeXYZ. Semua nama API doXYZ diganti menjadi performXYZ. (I7f164)
  • API untuk mencetak semantik aplikasi sebagai hierarki, bukan daftar datar. Hapus juga SemanticsMatcher.any dan sebagai gantinya, gunakan findRoot().printToString() untuk mencetak semantik. (I866b5)
  • KeyEvent tidak digunakan lagi dan digantikan oleh KeyEvent2 (I68730)
  • Sebuah flag opsional baru useUnmergedTree telah ditambahkan ke pencari pengujian. (I2ce48)
  • Menghapus API pengujian ukuran yang tidak digunakan lagi. (Iba0a0)
  • Class unit IntBounds telah ditambahkan dan mewakili batas piksel bilangan bulat dari tata letak. API PopupPositionProvider telah diupdate untuk menggunakannya. (I0d8d0, b/159596546)
  • Menambahkan parameter perangkat baru ke @Preview (I39049)

Perbaikan Bug

  • 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 lagi digunakan untuk mendukung ScrollState' (I400ce, b/157225838, b/149460415, b/154105299)
  • Properti semantik satu nilai sekarang menggunakan gaya pemanggilan. Misalnya, 'semantik { hidden = true }' sekarang ditulis sebagai: 'semantik { hidden() }'. (Ic1afd, b/145951226, b/145955412)
  • Menambahkan anotasi API eksperimental untuk API terkait input kunci (I53c0a)
  • Transition API telah diubah untuk mengembalikan TransitionState, bukan meneruskan TransitionState ke turunan. Hal ini membuat API lebih konsisten dengan API animate(). (I24e38)
  • Applier kini memerlukan metode clear() untuk memisahkan posisi (Ibe697)
  • Membuat API eksperimental LayoutNode (I4f2e9)
  • Pop-ups, Dialogs, dan Menus sekarang mewarisi MaterialTheme kontekstual (Ia3665, b/156527485)
  • tambahkan fungsi top-level withFrameNanos untuk pengaturan waktu animasi (Ie34c5)
  • 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)
  • IllegalStateException sekarang dimunculkan jika Anda mencoba memicu sinkronisasi di thread utama, misalnya saat Anda melakukan:

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

    Hapus panggilan ke runOnIdleCompose jika terjadi:

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

    (Idced7, b/159224666)

  • Menambahkan operator TextDecoration.plus (I0ad1a)

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

Versi 0.1.0-dev14

24 Juni 2020

androidx.ui:ui-*:0.1.0-dev14 dirilis. Versi 0.1.0-dev14 berisi commit berikut.

Perubahan API

  • Penggunaan IntPx diganti dengan Int. IntPxPosition diganti dengan IntOffset. IntPxSize diganti dengan IntSize. (Ib7b44)
  • Agar dapat mengonsolidasi jumlah class yang digunakan untuk mewakili informasi ukuran, kami membuat standar penggunaan class Size, bukan PxSize. Hal ini memberikan manfaat dari class inline untuk menggunakan tipe data long yang memuat 2 nilai float untuk mewakili lebar dan tinggi yang diwakili sebagai float. (Ic0191)
  • Agar dapat mengonsolidasi jumlah class yang digunakan untuk mewakili informasi pemosisian, kami membuat standar penggunaan class Offset, bukan PxPosition. Hal ini memberikan manfaat dari class inline untuk menggunakan tipe data long yang memuat 2 nilai float untuk mewakili offset x dan y yang diwakili 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 (I086f4)
  • Posisi Int baris perataan yang ditampilkan dari Placeable#get(AlignmentLine) sekarang bukan null. Jika baris perataan yang dikueri tidak ada, AlignmentLine.Unspecified akan ditampilkan. (I896c5, b/158134875)
  • Parameter pengubah telah ditambahkan pada composable AndroidView. (I48a88, b/158746303)
  • Semantics() tidak digunakan lagi. Gunakan Modifier.semantics() sebagai gantinya. (I72407, b/158841414)
  • Tambahkan composable viewModel() yang memungkinkan untuk membuat atau mendapatkan ViewModel yang sudah dibuat dan serupa dengan cara kerjanya di Aktivitas atau Fragmen (I5fdd1)
  • 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 (I97a5a)
  • TestTag tidak digunakan lagi. Gunakan Modifier.testTag sebagai gantinya (If5110, b/157173105)
  • Penerapan ParentDataModifier#modifyParentData default tanpa pengoperasian telah dihapus - hal ini sama dengan tidak menerapkan antarmuka sejak awal. (I0deaa)
  • ScaleFit yang tidak digunakan lagi telah dihapus. Gunakan ContentScale sebagai gantinya. (Ifbc5b)
  • AdapterList diganti namanya menjadi LazyColumnItems (6decc02)
  • Menambahkan LazyRowItems - Analog scrolling horizontal LazyColumnItems (Ibbcf7)
  • androidx.ui.foundation.shape.RectangleShape telah dihapus; gunakan androidx.ui.graphics.RectangleShape sebagai gantinya (I94939, b/154507984)
  • Menambahkan Modifier.zoomable untuk fungsionalitas cubit untuk zoom (Id5d63)
  • Komponen Toggleable tidak digunakan lagi. Gunakan Modifier.toggleable sebagai gantinya (I35220, b/157642842)
  • MutuallyExclusiveSetItem tidak digunakan lagi. Gunakan Modifier.selectable sebagai gantinya. (I02b47, b/157642842)
  • Menambahkan parameter fontWeight ke Text, yang sebelumnya tidak sengaja terlewatkan (I56937)
  • Parameter persen saat membuat panduan ConstraintLayout telah diganti namanya menjadi fraksi. (Ida2db)
  • Menambahkan dukungan untuk margin penghalang ConstraintLayout. (I47ffe)
  • Memperbaiki dukungan RTL di ConstraintLayout. Menambahkan API unaware RTL. (I3b1c7)
  • DSL baru untuk ConstraintLayout telah ditambahkan. Lihat contoh untuk detail selengkapnya. (Icaa9a)
  • Menambahkan anotasi @ExperimentalLayout. ConstraintLayout, FlowRow, dan FlowColumn sekarang diberi tag untuk menandai bahwa API mereka akan berubah. (I412a8)
  • Menambahkan Material Outlined Textfield (I1a518)
  • TabRow.TabPosition tidak berisi posisi di Dp, bukan di IntPx (I34a07, b/158577776)
  • Modifier.ripple 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. (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 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 relativeOffset(x, y) ke GestureScope dan PartialGestureScope, yang menghasilkan instance Offset dengan nilai-nilai yang berhubungan dengan ukuran komponen. relativeOffset(.1f, .2f) adalah Offset di mana x 10% dari lebar komponen dan y 20% dari tinggi komponen. (Ia4bf7, b/158291007)
  • Saat memasukkan klik dua kali dan klik panjang, Anda kini dapat menentukan durasi gestur yang dimasukkan tersebut. (I51c97, b/155464717)
  • Menambahkan properti ke GestureScope dan PartialGestureScope untuk mengakses koordinat umum sebuah komponen. Atribut itu adalah Float untuk properti 1 dimensi (seperti right) dan Offsets untuk properti 2 dimensi (seperti centerLeft).

    Properti 1 dimensi adalah:

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

    Properti 2 dimensi adalah: * topLeft * topCenter * topRight * centerLeft * center (sudah ada, disebutkan untuk kelengkapan) * centerRight * bottomLeft * bottomCenter * bottomRight

    Contoh penggunaan:

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

(I49ef3, b/158291007) - Menambahkan API injeksi gestur multi-sentuh untuk menguji komponen saat melakukan gestur multi-sentuh.

Saat menginjeksikan gestur, Anda sekarang dapat menetapkan beberapa pointer dengan menyediakan ID pointer ke metode gestur parsial. Jika tidak ada id pointer yang ditetapkan, pointer 0 diasumsikan, dan disebut pointer default. Perhatikan bahwa semua gestur prefab (sendClick, sendSwipe, dan semua metode yang dibuat di sini) menggunakan pointer default. Metode berikut di PartialGestureScope sekarang memiliki beban berlebih yang menerima ID pointer: - sendDown - sendMoveTo - sendMoveBy - sendUp

Setiap peristiwa kini berisi daftar lengkap lokasi saat ini dari setiap pointer aktif (pointer aktif yang sedang tidak aktif), dan metode yang tercantum di atas segera mengirimkan peristiwa. Selain itu, tiga metode baru diperkenalkan: - movePointerTo - movePointerBy - sendMove

Metode movePointerTo dan movePointerBy mengubah lokasi saat ini dari sebuah pointer, tetapi tidak mengirimkan peristiwa untuk menunjukkannya. Akibatnya, metode itu juga tidak memajukan waktu gestur saat ini. Hal ini memungkinkan Anda memindahkan beberapa pointer secara bersamaan. Metode terakhir, sendMove, tidak menerima parameter apa pun dan hanya mengirimkan peristiwa pemindahan, memungkinkan Anda untuk "mengosongkan" semua gerakan pointer. Jika pointer telah diupdate dengan movePointerXx, dan peristiwa down atau up akan dikirim, peristiwa pemindahan akan segera dikirim sebelum peristiwa down atau up.

Penentuan waktu semua metode juga sedikit berubah. Untuk saat ini, sendDown dan sendUp tidak lagi memajukan waktu gestur, sehingga Anda dapat mengirimkan beberapa pointer down atau up secara bersamaan. Semua metode lainnya memajukan waktu gestur. Saat ini tidak (belum) memungkinkan untuk mengubah delta waktu. (I9acac, b/157142514) - Menambahkan AnnotatedString.getStringAnnotations yang menampilkan semua anotasi dalam rentang itu. (I1fa00)

Perbaikan Bug

  • Memperkenalkan API animasi stateless tingkat rendah. API ini (I63bf7)
  • Fungsi yang dapat dikomposisi Recompose tidak lagi menjadi abstraksi yang berguna. Sebagian besar rekomposisi harus terjadi sebagai hasil penugasan MutableState. Untuk hal-hal selain itu, sebaiknya Anda menggunakan fungsi invalidate untuk memicu rekomposisi cakupan saat ini. (Ifc992)
  • 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)
  • 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)
  • Kini Crossfade dapat berfungsi dengan null sebagai nilai awal (Iad6a4, b/155947711)
  • 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)
  • androidx.ui.foundation.TextFieldValue dan androidx.ui.input.EditorValue tidak digunakan lagi. Composable TextField, FilledTextField, dan CoreTextField yang menggunakan jenis tersebut juga tidak digunakan lagi. Sebagai gantinya, gunakan androidx.ui.input.TextFieldValue (I4066d, b/155211005)
  • Memperbaiki masalah ketika pengiriman input pointer akan menyebabkan error jika PointerInputFilters dihapus melalui subkomposisi selama pengiriman. Hal ini sekarang telah diperbaiki. (I1f48b, b/157998762)
  • Memperbaiki masalah ketika pengiriman input pointer akan menyebabkan error jika PointerInputFilters dihapus melalui subkomposisi selama pengiriman. Hal ini sekarang telah diperbaiki. (Iab398, b/157998762)
  • 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.

    Memperbarui DrawScope.drawRoundRect agar menggunakan satu parameter Radius, bukan 2 nilai float yang terpisah untuk radius sepanjang sumbu x dan y (I46d1b)

  • Kursor TextField memiliki animasi berkedip (Id10a7)

  • Gestur parsial tidak lagi mengharuskan penerusan GestureToken (Id7ea5)

  • Memperbaiki bug ConstraintLayout yang menyebabkan error pada rekomposisi. (Ibee5a, b/158164341)

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

  • Mengubah nama paket untuk Locale dan LocaleList dari androidx.ui.text menjadi androidx.ui.intl (I8132c)

Versi 0.1.0-dev13

10 Juni 2020

androidx.ui:ui-*:0.1.0-dev13 dirilis. Versi 0.1.0-dev13 berisi commit berikut.

Masalah Umum

  • Jika aplikasi bergantung pada androidx.core:core-ktx:1.2.0 dan menggunakan FontFamily dengan beberapa font/ketebalan font, font akan dirender dengan ketebalan reguler. Kami akan menangani masalah ini, solusi sementaranya adalah dengan menggunakan androidx.core:core-ktx:1.2.0-alpha01 atau androidx.core:core-ktx:1.1.0.

Versi 0.1.0-dev12

27 Mei 2020

androidx.ui:ui-*:0.1.0-dev12 dirilis. Versi 0.1.0-dev12 berisi commit berikut.

Perubahan API

  • Menambahkan dukungan animate() untuk Dp, Px, Size, Position, Bounds, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds, dan AnimationVector (Ib7518, b/156559139)
  • Menambahkan komponen DropdownMenu di ui-material, untuk implementasi menu Desain Material. (I9bb3d, b/135742486)
  • Menghapus LayoutTag() yang tidak digunakan lagi, sebagai gantinya gunakan Modifier.tag(). (If8044, b/157020665, b/156577646)
  • Menghapus Modifier.matchParent() yang tidak digunakan lagi, sebagai gantinya gunakan Modifier.matchParentSize(). (If8044, b/157020665, b/156577646)
  • Mengganti penggunaan class Px di berbagai class compose sebagai bagian dari upaya pemfaktoran ulang besar-besaran guna hanya bergantung pada jenis primitive dan Dp untuk parameter piksel (I57bff, b/156681014)
  • Modifier.semantics sudah tidak digunakan lagi untuk memungkinkan penggunaan komponen tingkat tinggi. (I4cfdc, b/153198273, b/154023028)
  • DoubleTapGestureFilter sekarang membedakan SingleTapGestureFilter di seluruh hierarki. (If92b1, b/147609897, b/148553848, b/138605697, b/148464969)
  • Memperbarui Alignment API dan menambahkan dukungan untuk perataan mutlak (yang tidak otomatis mencerminkan konteks Rtl) (I38cd3, b/153633345)
  • VerticalScroller sekarang menyediakan Kolom secara otomatis. HorizontalScroller sekarang menyediakan Row secara otomatis. (Ieca5d, b/157020670)
  • 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)
  • VerticalScroller dan HorizontalScroller kini mendukung scroll balik jika isReversed ditetapkan pada ScrollerPosition (I953bd, b/155852672)
  • Mendukung penambahan composable ke tata letak teks. (I1373c, b/139320966)
  • Menghapus DrawBackground API dan diganti dengan API ekstensi drawBackground di Pengubah. Memfaktorkan ulang implementasi drawBackground paint, kuas, dan warna untuk mengurangi jalur kode serta menghapus persyaratan agar Pengubah dibuat sebagai bagian dari komposisi. (I0343a, b/155999867)
  • Modifier.padding(InnerPadding) telah ditambahkan (I94985, b/157133803)
  • Menghapus RowAlign, ColumnAlign in Row, dan Column yang tidak digunakan lagi. (If60d4, b/154524540, b/155858731)
  • Menambahkan pengubah tata letak offsetPx, yang dapat digunakan untuk menentukan offset (dinamis) dalam px. (I5af57, b/154841615)
  • Mengizinkan penampilan/penyembunyian keyboard virtual secara manual menggunakan SoftwareKeyboardController (Ifb9d6, b/155427736)
  • Mengganti nama Emphasis.emphasize() menjadi Emphasis.applyEmphasis() (Iceebe, b/152874916)
  • Menambahkan utilitas untuk menyimulasikan gestur cubit dalam pengujian. (If6c42, b/145593752)
  • Menghapus class Size yang tidak digunakan karena terdapat class Size duplikat pada modul ui-geometry yang sedang digunakan. (I1b602, b/156546424)
  • AnnotatedString.Item diganti namanya menjadi AnnotatedString.Range. (I2d44d, b/156126205)
  • Mengubah strategi pembuatan kode compiler Compose. Sebelum perubahan, compiler compose akan mengubah panggilan ke fungsi yang dapat dikomposisi. Dengan perubahan ini, sekarang kami mengubah isi fungsi yang dapat dikomposisi dan membiarkan callsite tidak berubah (sebagian besarnya).

    Artinya, sebagian besar logika yang digunakan untuk berkomunikasi dengan runtime compose terjadi di awal isi fungsi, bukan di callsite.

    Ini seharusnya menjadi perubahan yang kompatibel dengan sumber untuk semua penggunaan compose. Sebagian besar pengguna compose tidak perlu mengupdate kode apa pun karena perubahan ini.

    Untuk mendukung tugas ini, tanda tangan JVM dari semua fungsi yang dapat dikomposisi telah berubah. Fungsi yang dapat dikomposisi yang menerima satu parameter diubah menjadi fungsi yang menerima 3 parameter. Parameter tambahannya adalah Composer, bilangan bulat 'kunci', dan bilangan bulat bitmask yang digunakan untuk menyebarkan metadata melalui panggilan.

    Compose kini juga mengubah argumen default ke fungsi yang dapat dikomposisi. Hal ini dilakukan tanpa menimbulkan kelebihan beban default pada fungsi itu sendiri, sehingga perubahan ini akan menyebabkan lebih sedikit fungsi yang ditentukan.

    Perubahan perilaku disengaja dan diketahui yang dihasilkan dari tindakan berikut:

    1. Beberapa panggilan akan melewati bagian, di mana tidak pernah dilakukan sebelumnya
    2. Ekspresi yang dapat dikomposisi dalam ekspresi argumen default kini berlangganan dan ditangani dengan benar

    Tugas ini mencakup beberapa pengoptimalan:

    1. Hasil perbandingan parameter disebarkan melalui grafik panggilan ke fungsi yang dapat dikomposisi lainnya. Ini akan menyebabkan lebih sedikit perbandingan pada saat runtime, mengurangi ukuran tabel slot, serta lebih banyak melewatkan fungsi yang dapat dikomposisi yang sebelumnya tidak dilewati
    2. Parameter yang ditetapkan sebagai "statis" pada waktu kompilasi tidak lagi dibandingkan atau disimpan di runtime. Hal ini mengurangi jumlah perbandingan dan mengurangi ukuran tabel slot.
    3. Struktur alur kontrol pada bagian isi fungsi digunakan untuk meminimalkan jumlah kelompok yang dihasilkan. Tindakan ini mengurangi ukuran tabel slot dan menyebabkan lebih sedikit tugas untuk runtime
    4. Parameter pengirim dan penerima ke fungsi yang tidak terpakai tidak akan disertakan dalam menentukan kemampuan melewati fungsi jika tidak digunakan di dalam bagian isi fungsi.

    Sebagian besar perubahan yang dapat menyebabkan gangguan terjadi pada API yang ditargetkan oleh compiler secara langsung, dan penggunaan compose biasanya tidak akan terpengaruh:

    1. Composer::startExpr telah dihapus
    2. Composer::endExpr telah dihapus
    3. Composer::call tidak digunakan lagi
    4. Kelebihan beban non-vararg pada key telah dihapus. Gunakan versi vararg ke depannya.
    5. Anotasi Pivotal tidak digunakan lagi. Gunakan key sebagai pengganti.
    6. ScopeUpdateScope::updateScope diubah untuk mengharapkan Function3, bukan Function1
    7. restartableFunction dan restartableFunctionN diupdate untuk menyertakan parameter waktu kompilasi tambahan

    (I60756, b/143464846)

Anotasi @Model tidak digunakan lagi

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

    Justifikasi

    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.
    • Menghapus penggunaan corner-case dan kesulitan untuk menjawab pertanyaan tentang mengonfigurasi @Model sebagai hal-hal yang perlu ditangani
      • Class data @Model, yang setara, 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 "keganjilan" 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 immutable atau "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 pendekatan berikutnya adalah yang sebaiknya Anda gunakan.

    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)

Perbaikan Bug

  • Memperbaiki bug: Teks tidak dirender dengan benar saat ketebalan dan jenis font disarangkan pada AnnotatedString. (I77a9d, b/155081453)
  • Menggabungkan implementasi CanvasScope sehingga hanya terdapat DrawScope dan ContentDrawScope
    • Mengganti nama CanvasScope menjadi DrawScope.
    • Memperbarui DrawScope guna mengimplementasikan antarmuka Density dan menyediakan LayoutDirection
    • Menghapus subclass DrawScope dalam ContentDrawScope
    • Painter dan PainterModifier telah diperbarui agar tidak lagi menyimpan properti RTL sendiri karena DrawScope telah menyediakannya secara otomatis (I1798e, b/155918846)
  • Mengganti penggunaan class Px di berbagai class compose sebagai bagian dari upaya pemfaktoran ulang besar-besaran guna hanya bergantung pada jenis primitive dan Dp untuk parameter piksel (Iede0b, b/156681014)

Versi 0.1.0-dev11

14 Mei 2020

androidx.ui:ui-*:0.1.0-dev11 dirilis. Versi 0.1.0-dev11 berisi commit berikut.

Perubahan API

  • Kini Crossfade menerima parameter AnimationBuilder opsional untuk memungkinkan pengonfigurasian animasi (I6d6e0)
  • API lambda akhir WithConstraints telah diubah. Sebagai ganti dari dua parameter, kini API tersebut memiliki cakupan penerima, selain batasan dan layoutDirection yang menyediakan properti minWidth, maxWidth, minHeight, dan maxHeight di Dp (I91b9, b/149979702)
  • Mengganti nama LayoutModifier2 menjadi LayoutModifier. (Id29f3)
  • Menghapus antarmuka LayoutModifier yang tidak digunakan lagi. (I2a9d6)
  • HorizontalScroller dan VerticalScroller kini memulihkan posisi scroll-nya menggunakan status instance tersimpan. (Ia0fae, b/155075048)
  • FocusManagerAmbient dihapus. Gunakan FocusModifier.requestFocus untuk memperoleh fokus. (Ic4826)
  • Tata letak tabel sementara waktu dihapus hingga kami menyediakannya kembali dengan API baru. (Id88a7)
  • Membuat CanvasScope API yang menggabungkan objek Canvas untuk mengekspos antarmuka API gambar yang deklaratif dan stateless. Transformasi disertakan dalam cakupan penerimanya sendiri dan informasi ukuran juga mencakup batas inset yang sesuai. Ini tidak mengharuskan konsumen untuk mempertahankan stateobject Paint-nya sendiri dalam mengonfigurasi operasi gambar.
    • Menambahkan CanvasScopeSample serta mengupdate aplikasi demo guna menyertakan Demo grafis deklaratif (Ifd86d)
  • ColoredRect telah dihapus Sebagai gantinya, gunakan Box dengan pengubah drawBackground (I983c7, b/152753731)
  • Menambahkan penyesuaian warna kursor ke TextField (I6e33f)
  • Kini Anda dapat menyembunyikan/menampilkan keyboard virtual dengan menggunakan SoftwareKeyboardController yang dikirim oleh callback onTextInputStarted (I8dc44, b/151860051)
  • TextFieldValue yang digunakan dengan TextField kini dapat bertahan dari pembuatan ulang aktivitas jika digunakan seperti ini: teks variabel per savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() } (I5c3ce, b/155075724)
  • Menambahkan parameter yang sering digunakan ke Text(). Jika saat ini Anda membuat jenis teks lokal untuk meneruskan sejumlah parameter berikut, seperti Text(style = TextStyle(textAlign = TextAlign.Center)), Anda dapat memberikan parameternya secara langsung: Text(textAlign = TextAlign.Center) (I82768)
  • Mengganti parameter CoreTextField/TextField focusIdentifier dengan FocusNode agar dapat berintegrasi dengan subsistem yang menjadi fokus. (I7ea48)
  • Memperbarui TextField agar menempati semua ruang yang tersedia yang diberikan dalam dimensi horizontal (Ib08df, b/154638552)
  • AlignmentLineOffset yang dapat disusun sudah tidak digunakan lagi, sebagai gantinya harap gunakan pengubah relativePaddingFrom(). CenterAlignmentLine yang dapat disusun telah dihapus. (I60107)
  • 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)
  • Container telah dihapus Sebagai gantinya, gunakan Box (Ibbc2b, b/151407926)
  • Menghapus pengubah LayoutWidth/Height/Size yang tidak digunakan lagi. (Ib0bc1)
  • Menambahkan parameter value default untuk pengubah offset. (I37f06)
  • Menambahkan pengubah padding simetris. (I39840, b/152941819)
  • Menghapus penggubah LayoutAspectRatio yang tidak digunakan lagi. (I65a74)
  • Memperbaiki bug pada lebar dan tinggi pengubah yang menyebabkan layout gabungan diukur tanpa batasan sumbu yang berlawanan. (I210b8, b/154797971)
  • 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 (tinggi) goresan LinearProgressIndicator, Anda dapat menggunakan Modifier.preferredHeight() atau pengubah ukuran lain. (Icea16, b/154919081)
  • Menambahkan slot API untuk ikon awal dan akhir pada FilledTextField dan menangani status error-nya (Ic12e0)
  • Menambahkan tindakan doPartialGesture dengan penerima PartialGestureScope yang memiliki metode sendDown, sendMoveTo, sendMoveBy, sendUp, dan sendCancel. (I6b058, b/152477560)
  • Menambahkan metode sendDown, sendMove, sendUp, dan sendCancel ke InputDispatcher dan GestureToken untuk menggabungkan peristiwa sentuh individu ke dalam satu gestur. (Ibd278, b/152477560)
  • Menambahkan operator plus untuk (Text/Paragraph/Span)Style yang didelegasikan ke fungsi merge(). (Ia1add)
  • Project ui-framework dan ui-platform telah digabungkan menjadi ui-core, sehingga semua dependensi pada modul tersebut hanya perlu bergantung pada ui-core. (/I70067)

Perbaikan Bug

  • 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)
  • Menghapus pengubah LayoutAlign yang tidak digunakan lagi. (I10877)
  • Menambahkan Toolbar untuk operasi terkait teks. (I49d53)

Versi 0.1.0-dev10

29 April 2020

androidx.ui:ui-*:0.1.0-dev10 dirilis. Versi 0.1.0-dev10 berisi commit berikut.

Perubahan API

  • Mengganti semua penggunaan Color nullable di API dengan yang non-nullable dan menggunakan Color.Unset, bukan null (Iabaa7)
  • Fungsi pengukuran intrinsik di Layout dan LayoutModifier2 sekarang memiliki penerima IntrinsicMeasureScope yang menyediakan API kueri intrinsik dengan arah tata letak yang disebarkan secara implisit. (Id9945)
  • Turunan Layout dan LayoutModifier dapat diukur dengan arah tata letak yang berbeda. (Ibd731)
  • 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 telah diubah: parameter pertama kini menjadi elevation dan parameter kedua kini menjadi shape, dengan default RectangleShape. (I20150, b/152417501)
  • Menghapus onSizeChange dan onPositionChange di Owner. (I5c718)
  • Menambahkan Constraints2, salinan Constraints yang hanya mendukung nilai konstanta Int bukan IntPx. IntPx akan dihapus dan semua batasan bilangan bulat akan diasumsikan sebagai piksel seperti Android.
    • Juga menambahkan IntSize, yang nantinya akan menggantikan IntPxSize. (I4b43a)
  • Menambahkan InteractionState dan Interaction, yang mempermudah pembuatan komponen yang bereaksi terhadap perubahan status UI seperti menekan, dan menarik (Icfe25, b/152525426)
  • RectangleShape telah dipindahkan dari androidx.ui.foundation.shape.* ke androidx.ui.graphics.* (Ia74d5, b/154507984)
  • Update TextField API - callback onFocus dan onBlur telah digabung menjadi callback onFocusChange(Boolean) tunggal dengan parameter boolean (I66cd3)
  • FontLoader telah dihapus Silakan gunakan fontResource. (Id0308)
  • Menghapus MaskFilter API yang tidak digunakan karena memiliki penggunaan terbatas dan tidak dioptimalkan untuk akselerasi hardware dalam sebagian besar kasus penggunaan (I54f76)
  • Menambahkan Unset Color untuk merepresentasikan nilai yang belum ditetapkan tanpa boxing `Colors. (If901a)
  • Menambahkan metode ekstensi Canvas.rotate dan Canvas.scale untuk menggunakan koordinat pivot opsional bagi transformasi. Tindakan ini mengubah default ke sudut kiri atas dari terjemahan kanvas saat ini.
    • Juga memindahkan Canvas.rotateRad menjadi metode ekstensi untuk konsistensi (Ibaca6)
  • Warna default FAB dan FAB yang Diperluas telah diubah menjadi MaterialTheme.colors.secondary. (I3b9b9, b/154118816)
  • Tidak perlu lagi memanggil onIdle() secara eksplisit setelah ComposeTestRule.setContent {}. (Iafb2e, b/154079800)
  • Anda sekarang dapat meneruskan ActivityTestRule kustom ke AndroidComposeTestRule (I38206, b/153623653)
  • Menambahkan getLineStart, getLineEnd, getEllipsisOffset, dangetEllipsisCount ke TextLayoutResult (Ibc801)
  • FontWeight.lerp tidak lagi terpisah. Class tersebut masih merupakan class data. (I521c2)
  • Konstruktor FontWeight kini bersifat publik, bukan lagi class data. (Id6b1f)

Perbaikan Bug

  • Memperkenalkan parameter persegi panjang opsional tambahan ke ImagePainter untuk mendukung penggambaran subbagian ImageAsset yang mendasarinya (I0ea9e)
  • Memperbaiki error di AdapterList saat menghapus item (Ic64b0, b/153195921)
  • Sekarang, Anda diharuskan untuk menggunakan ComposeTestRule agar Finders (seperti findByTag) dapat berfungsi (I75bb9, b/153565271)

Versi 0.1.0-dev09

15 April 2020

androidx.ui:ui-*:0.1.0-dev09 dirilis. Versi 0.1.0-dev09 berisi commit berikut.

Perubahan API

  • Membuat Alignment instantiable dengan nilai arbitrer. Menambahkan Alignment 1D. (Ia0c05)
  • alignToSiblings now accepts aMeasuredinstead ofPlaceable`. (I5788d)
  • (I45f09, b/152842521)
    • Mengganti nama ScaleFit menjadi ContentScale
    • Memindahkan ContentScale dari ui-graphics ke modul ui-core agar berada dalam modul yang sama dengan Alignment API.
    • Mengganti nama FillMaxDimension menjadi Crop
    • Mengganti nama FillMinDimension menjadi Fit
    • Mengganti nama Fit menjadi Inside agar cocok dengan ImageView.ScaleType yang setara
    • Dokumentasi tambahan yang menunjukkan kombinasi dari Crop dan Alignment.Center mendapatkan hasil yang sama seperti ImageView.ScaleType.CENTER_CROP, dan Fit yang digunakan dengan Alignment.Center mendapatkan hasil yang sama seperti ImageView.ScaleType.FIT_CENTER
    • Inside yang digunakan dengan Alignment.Center mendapatkan hasil yang sama seperti ImageView.ScaleType.CENTER_INSIDE
  • Menambahkan dukungan Rtl untuk pengubah gambar. (I0aaf9)
  • Merilis API untuk meng-inflate Tampilan Android dari XML. Lihat demo ViewInCompose untuk mengetahui detail selengkapnya. (I42916)
  • Menambahkan positionInParent dan boundsInParent untuk LayoutCoordinates. (Icacdd, b/152735784)
  • DrawLayerModifier dan drawLayer() sekarang mengubah default clipToBounds dan clipToOutline menjadi false. (I0eb8b, b/152810850)
  • Mengganti nama LayoutResult menjadi MeasureResult. (Id8c68)
  • Menambahkan LayoutModifier2, API baru untuk menentukan pengubah tata letak; tidak menggunakan lagi LayoutModifier (If32ac)
  • Menghapus ProvideContentColor, sebagai gantinya gunakan ContentColorAmbient langsung dengan Providers (Iee942)
  • Menambahkan parameter warna ke teks, memungkinkan penggantian warna gaya teks tanpa perlu menggabungkan dengan gaya yang disediakan dalam tema secara manual. (I41a66)
  • 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)
  • LayoutDirectionAmbient tidak digunakan lagi. Untuk membaca arah tata letak yang ditentukan oleh lokal, gunakan localeLayoutDirection pada ConfigurationAmbient (I851b1)
  • LifecycleOwnerAmbient baru kini tersedia. Sekarang, Aktivitas yang Anda gunakan dengan Compose UI akan memperluas androidx.activity.ComponentActivity (atau AppCompatActivity). setContent pada android.app.Activity sekarang sudah tidak digunakan lagi (Idb25a, b/153141084)
  • Memunculkan RTL dukungan (Ib6657)
  • Menambahkan ClipboardManager. (I1dd2b)
  • Menambahkan dukungan untuk menyesuaikan dimensi turunan dari ConstraintLayout (Idb1a5)
  • OnChildPositioned telah dihapus Sebagai gantinya, developer sebaiknya menggunakan pengubah Modifier.onChildPositioned. (I5ade7, b/151141173, b/151641453, b/151818355)
  • Mengganti nama toFrameworkRect/toFrameworkRectF menjadi toAndroidRect/toAndroidRectF agar cocok dengan konvensi penamaan untuk konversi objek antara compose dan Android Framework API yang di-build untuk membuatnya. Selain itu, dokumen tentang API ini juga diperbarui (I86337)
  • Mengganti nama EdgeInsets menjadi InnerPadding. Mengganti parameter innerPadding dari Material Button menjadi padding. (I66165)
  • Menambahkan pengubah untuk mengubah ukuran ke pengukuran intrinsik dan menghentikan penggunaan komponen yang digunakan atas tujuan ini. (I8295d)
  • Menghapus Wrap dan Center yang dapat disusun yang tidak digunakan lagi. (I29e23)
  • Penggeser sekarang bersifat stateless. Pengguna perlu meneruskan dan memperbarui statusnya sendiri, seperti halnya pada kontrol lainnya. (Ia00aa)
  • StaticDrawer telah dihapus. Jika Anda memerlukannya, gunakan Box dengan lebar yang ditentukan material (I244a7)
  • Menambahkan param pengubah ke ListItem dan mengurutkan ulang param untuk mempromosikan konten lambda di akhir (I66e21)
  • Menambahkan parameter konstruktor defaultFontFamily ke Typography, sehingga memungkinkan penentuan jenis font default yang akan digunakan untuk setiap TextStyles yang disediakan yang tidak memiliki kumpulan jenis. (I89d07)
  • Menghapus Tabel Data Material untuk sementara dari antarmuka API. (Iaea61)
  • Mengganti nama parameter dalam Divider yang dapat disusun (Ic4373)
  • Parameter "turunan" di akhir diganti namanya untuk berbagai komponen Material. Harap gunakan nama baru jika Anda menggunakannya melalui param bernama (atau cukup gunakan sintaksis lambda di akhir) (Ia6d19)
  • Menghapus MaterialTheme.emphasisLevels, sebagai gantinya gunakan EmphasisAmbient.current untuk mengambil level penekanan (Ib5e40)
  • savedInstanceState() sekarang dapat digunakan dengan jenis nullable (I6847f, b/153532190)
  • Menambahkan ui-rxjava2 - artefak baru dengan adaptor untuk RxJava2. (Ifab4b, b/153369097)

    • Contoh penggunaan:
    val value by observable.subscribeAsState()
    
  • Menambahkan ui-livedata - artefak baru dengan adaptor untuk LiveData. (Ie9e8c, b/150465596)

    • Contoh penggunaan:
    val value by liveData.observeAsState()
    

Perbaikan Bug

  • Menambahkan parameter verticalGravity dan horizontalGravity ke Row dan Column. (I7dc5a)
  • ui-text module was renamed asui-text-core` (I57dec)
  • Menyempurnakan DrawModifier API ((Ibaced, b/152919067)):
    • Membuat cakupan penerima untuk draw() ContentDrawScope
    • Menghapus semua parameter pada draw()
    • DrawScope memiliki antarmuka yang sama seperti CanvasScope terdahulu
    • ContentDrawScope memiliki metode drawContent()
  • runOnIdleCompose dan runOnUiThread sekarang menjadi fungsi global, sebagai ganti metode pada ComposeTestRule. (Icbe8f)
  • [Mutable]Operator delegasi properti status dipindahkan ke ekstensi untuk mendukung pengoptimalan delegasi properti Kotlin 1.4. Pemanggil harus menambahkan impor untuk terus menggunakan by state { ... } atau by mutableStateOf(...). (I5312c)
  • ColoredRect tidak digunakan lagi. Silakan gunakan Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731)
  • Kami mengubah cara kami mengukur tata letak pertama yang Anda masukkan ke dalam blok activity.setContent { }. Sebelumnya, tata letak dipaksa mengisi seluruh layar aktivitas, dan sekarang berperilaku seolah-olah Anda memasukkan tata letak ke dalam Stack: tata letak bisa lebih kecil dari layar dan akan diposisikan di sebelah kiri atas layar. Jika Anda menginginkan perilaku lama, Anda dapat menerapkan Modifier.fillMaxSize() untuk tata letak Anda. (Ie88a7, b/153453714)
  • Modul ui-text-compose diganti namanya menjadi ui-text. ui-text sekarang berisi CoreText dan CoreTextField yang dapat disusun (Ib7d47)
  • Memindahkan ui-framework/CoreText dan CoreTextField yang dapat disusun di bawah ui-text-compose. Anda dapat menyertakan ui-text-compose dalam project Anda. (I32042)
  • Memperbarui wrapContentWidth dan wrapContentHeight yang mengharapkan Alignment vertikal atau horizontal, bukan Alignment. Pengubah gravitasi diperbarui untuk menerima Alignment vertikal atau horizontal. Row, Column, dan Stack diperbarui untuk mendukung Alignment kustom berkelanjutan. (Ib0728)
  • Membuat PixelMap API untuk mendukung permintaan informasi piksel dari ImageAsset. (I69ad6)
  • Menambahkan implementasi Desain Material dari Kolom Teks yang Terisi (Ic75cd)
  • Nama paket ui-android-text (androidx.text) telah diganti dengan androidx.ui.text.platform agar sesuai dengan kebijakan androidx. (I42711)

Versi 0.1.0-dev08

1 April 2020

androidx.ui:ui-*:0.1.0-dev08 dirilis. Versi 0.1.0-dev08 berisi commit berikut.

Perubahan API

  • Menambahkan properti translationX/Y untuk mendukung pengimbangan daftar tampilan perintah gambar untuk Layer tertentu. Hal ini berguna untuk memindahkan konten sebagai respons terhadap animasi atau peristiwa sentuh. (I8641c)
  • Menambahkan parameter pivotX, pivotY ke Layer API untuk mendukung rotasi dan penskalaan titik tertentu pada layer (Ikf7c3)
  • Draggable telah dipindahkan ke pengubah (Id9b16, b/151959544)
  • Memindahkan Text ke paket androidx.ui.foundation, dari androidx.ui.core. (I87ce5)
  • 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)
  • Menambahkan VectorPainter API untuk menggantikan API subkomposisi yang ada untuk grafik vektor. Hasil subkomposisi adalah objek VectorPainter, bukan DrawModifier.
    • Penggunaan DrawVector yang dapat disusun sebelumnya tidak digunakan lagi dan diganti dengan VectorPainter.
    • Mengganti nama Image(Painter) API menjadi PaintBox(Painter)
    • Membuat Vector yang dapat disusun berperilaku seperti Image yang dapat disusun dengan VectorAsset, bukan ImageAsset (I9af9a) (b/149030271)
  • ParentData yang dapat disusun sudah 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)
  • OnPositioned dihapus dan diganti dengan pengubah onPositioned (I2ea3c)
  • Anggota RowScope dan ColumnScope kini dapat diakses dari luar Row dan Column. (I3a641)
  • Container kini sudah tidak digunakan lagi. Silakan gunakan Box. (I675ce, b/151407926)
  • FloatingActionButton API telah difaktorkan ulang untuk menerima lambda yang dapat disusun, bukan primitive. Lihat contoh terbaru untuk mengetahui informasi penggunaan. (I00622)
  • Fungsi baru: savedInstanceState() dan rememberSavedInstanceState(). Keduanya mirip dengan state() dan remember(), tetapi memiliki build dukungan status instance yang tersimpan (If1987, b/152025209)

Perbaikan Bug

  • Mengganti operator Modifier plus dengan fungsi ekstensi pabrik (I225e4)
  • Center yang dapat disusun sudah tidak digunakan lagi. Ini harus diganti dengan pengubah LayoutSize.Fill + LayoutAlign.Center, atau dengan salah satu dari Box atau Stack yang dapat disusun dengan pengubah yang cocok dan sudah diterapkan Idf5e0)
  • Mengubah MaterialTheme API seperti MaterialTheme.colors() dan MaterialTheme.typography() menjadi properti, bukan fungsi. Menghapus tanda kurung dari panggilan yang ada dan tidak mengharapkan adanya perubahan perilaku. (I3565a)

Versi 0.1.0-dev07

18 Maret 2020

androidx.ui:ui-*:0.1.0-dev07 dirilis. Versi 0.1.0-dev07 berisi commit berikut.

Perubahan API

  • Penambahan API ke ManualAnimationClock: hasObservers: Boolean dan parameter konstruktor dispatchOnSubscribe: Boolean (Iaa134)
  • Menambahkan OnPositionedModifier dan OnChildPositionedModifier untuk menggantikan fungsi OnPositioned dan OnChildPositioned yang dapat disusun. (I2ec8f)
  • Menambahkan LayerModifier, pengubah yang mengizinkan penambahan RenderNode untuk Tata letak. Pengubah tersebut memungkinkan pengaturan clipping, opasitas, rotasi, penskalaan, dan bayangan. Ini akan menggantikan RepaintBoundary. (I7100d, b/150774014)
  • Membuat arah tata letak disebarkan dari node tata letak induk ke turunan. Menambahkan pengubah arah tata letak. (I3d955)
  • Membuat Image yang dapat disusun untuk menangani pengubahan ukuran/tata letak selain menggambar ImageAsset tertentu ke layar. Gambar yang dapat disusun ini juga mendukung semua instance Painter arbitrer yang berkaitan dengan ukuran intrinsiknya, serta mendukung ukuran yang telah ditetapkan atau ukuran minimumnya (Ibcc8f)
  • 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. (Id5bbd)
  • Membuat metode ekstensi pada android.graphics.Bitmap dan Bitmap.asImageAsset() untuk membuat instance dari ImageAsset yang berguna untuk menggabungkan pengembangan aplikasi Android tradisional dengan framework compose. (Id5bbd)
  • androidx.compose.ViewComposer telah dipindahkan ke androidx.ui.node.UiComposer dan androidx.compose.Compose.subcomposeInto telah dipindahkan ke androidx.ui.core.subcomposeInto (Idef00)
  • Menghapus fungsi Layout Composable yang menerima vararg turunan. (I8f7f6)
  • WithConstraints memiliki parameter LayoutDirection (I6d6f7)
  • Menambahkan pengubah LayoutOffset untuk mengimbangi posisi tata letak (I0b8a3)
  • Surface dan Card dipindahkan dari androidx.ui.material.surface ke androidx.ui.material (I88a6d) (b/150863888)

Perbaikan Bug

  • Mengganti nama LayoutFlexible menjadi LayoutWeight. Mengganti nama parameter tight menjadi fill. (If4738)
  • Fungsi Opacity yang dapat disusun telah diganti dengan pengubah drawOpacity. (I5fb62)
  • Sekarang pengujian yang menggunakan AndroidComposeTestRule menyediakan jam animasi pada root komposisi yang memungkinkannya untuk dijeda, dilanjutkan, dan dilanjutkan secara manual. (Id54c5)
  • RepaintBoundary dihapus dan digantikan dengan DrawLayerModifier (I00aa4)
  • Button, FloatingActionButton, dan Clickable kini memiliki param enabled tersendiri. Beberapa param pada Button telah diganti namanya atau disusun ulang. (I54b5a)
  • DrawVector telah diubah dari fungsi reguler yang dapat disusun menjadi menampilkan drawVector() Modifier yang akan menggambar vektor sebagai latar belakang dari suatu tata letak. (I7b8e0)
  • Mengganti fungsi Clip yang dapat disusun dengan drawClip() pengubah. DrawClipToBounds adalah pengubah yang dapat digunakan dengan mudah saat Anda hanya perlu menyesuaikan nilai layer yang terhubung yang memiliki bentuk persegi panjang. (If28eb)
  • Mengganti fungsi yang dapat disusun DrawShadow dengan pengubah drawShadow(). Sekarang bayangan digambar sebagai bagian dari LayerModifier. (I0317a)
  • Wrap yang dapat dikomposisi sudah tidak digunakan lagi. Ini dapat diganti dengan pengubah LayoutAlign atau dengan Stack yang dapat disusun (Ib237f)
  • Mengganti nama Painter.toModifier menjadi Painter.asModifier karena Modifier yang baru dibuat memiliki referensi ke Painter asli yang dapat dibagikan ke beberapa instance Modifier (I7195b)
  • Padding negatif di LayoutPadding sekarang tidak diizinkan. Sebagai gantinya, gunakan LayoutOffset untuk offset posisi negatif. (Ifb5b1)

Versi 0.1.0-dev06

4 Maret 2020

androidx.ui:ui-*:0.1.0-dev06 dirilis. Versi 0.1.0-dev06 berisi commit berikut.

Perubahan API

  • Komponen stack mendukung arah kanan-ke-kiri (Ic9e00)
  • Dukungan awal untuk Rtl dalam tata letak Compose (Ia5519)
  • 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)
  • 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 dukungan untuk memanggil tindakan semantik kustom. (I8c818)

Perbaikan Bug

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

Versi 0.1.0-dev05

19 Februari 2020

androidx.ui:ui-*:0.1.0-dev05 dirilis. Versi 0.1.0-dev05 berisi commit berikut.

Perubahan API

  • Menambahkan Painter API. Membuat API untuk menggambar konten secara abstrak ke region yang ditentukan. Perilaku ini mirip dengan Drawable API, tetapi menyediakan antarmuka API yang lebih sederhana. Selain itu, terdapat implementasi umum untuk menerapkan berbagai efek seperti alfa dan menerapkan ColorFilters untuk implementasi gambar arbitrer dengan kemampuan implementasi tersebut untuk menyediakan dukungan yang lebih dioptimalkan untuk fasilitas ini. (aosp/1214802)
  • Perubahan yang dapat menyebabkan gangguan pada API ambien. Lihat log dan dokumentasi Ambient<T> untuk mengetahui detail selengkapnya (I4c7ee, b/143769776)
  • 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)
  • 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)
  • 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)
  • Menambahkan dukungan awal untuk menyematkan Tampilan Android ke dalam Compose. Lihat demo ViewInCompose.kt untuk mengetahui detail selengkapnya. (I6d1ce)
  • LayoutAlign telah diperbarui agar tidak mengisi ruang yang tersedia (I2b14f)
  • Menambahkan modul androidx.ui:ui-material-icons-core dan androidx.ui:ui-material-icons-extended. Anda dapat bergantung pada androidx.ui:ui-material-icons-extended agar dapat langsung menggunakan semua ikon Material (material.io/icons) dari dalam Compose. Subset kecil (yang saat ini berjumlah tiga, dan akan bertambah di masa mendatang) termasuk ikon yang paling sering digunakan akan langsung disertakan sebagai bagian dari library material UI utama, jadi Anda tidak perlu menambahkan dependensi besar ini untuk menggunakan ikon seperti Menu. Lihat dokumentasi androidx.ui.material.icons.Icons dan contoh terkait untuk mengetahui informasi selengkapnya.
  • AspectRatio yang dapat disusun telah dihapus dan diganti dengan pengubah. Menghapus FlexColumn yang tidak digunakan lagi, FlexRow yang dapat disusun, dan pengubah Spacing (Iec8a7)
  • Mengganti ButtonStyle dengan fungsi yang berbeda dan menghapus kelebihan beban pada teks (string). Lihat contoh Button terbaru untuk mengetahui informasi penggunaannya. (If63ab, b/146478620, b/146482131)

Perbaikan Bug

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

Masalah Umum

  • Perubahan terhadap properti semantik komponen secara tidak benar menyebabkan semua status pada turunan hilang, mengakibatkan error pada animasi dan semua yang bergantung pada status yang tetap pada seluruh rekomposisi. Karena lambda saat ini tidak dapat dibandingkan, ini mencakup komponen apa pun yang menetapkan tindakan semantik menggunakan lambda non-remembered, seperti Scroller. Masalah ini akan diperbaiki dalam rilis berikutnya. (b/148606417)

Versi 0.1.0-dev04

29 Januari 2020

androidx.ui:ui-*:0.1.0-dev04 dirilis. Commit yang disertakan dalam versi ini dapat dilihat (di sini).

Perubahan API

  • Menjadikan ID pointer unik secara universal. (I42cde)
  • Penggabungan node semantik (aosp/1138236)
  • Penyempurnaan pada antarmuka API Constraints (I0fd15)
  • PathParser dan PathNode/PathCommand telah difaktorkan ulang (I715ae)
  • Mengupdate antarmuka API DpConstraints (I712a0)
  • Dukungan untuk pengubah yang mengimplementasikan beberapa antarmuka telah ditambahkan. (I22c16)
  • Tindakan batalkan untuk bagian lain pendeteksi gestur telah diimplementasikan. (I349f4)
  • Color.compositeOver() telah ditambahkan ke Color (I5379d)
  • Menghapus beberapa class yang tidak diperlukan untuk androidx.ui:ui-core: ImageByteFormat, ImageRepeat, Matrix2. (I45e6b)
  • Kompilasi Kotlin inkremental dalam project Compose telah diaktifkan (b/144304390)
  • Menggabungkan Pengubah dengan + (Ic33d3)
  • Pengubah LayoutTag telah ditambahkan (I69fe4)
  • Atribut ParagraphStyle telah ditambahkan ke TextStyle (If0d40)
  • DrawModifier, jenis pengubah yang diizinkan untuk menggambar di permukaan tata letak yang dimodifikasi, telah ditambahkan. (I5fa56)
  • Mengubah penyimpanan untuk posisi pengubah menjadi relatif. (I5977f)
  • API pengujian telah ditambahkan untuk melakukan gerakan geser pada elemen (I9125a)
  • Komponen Box telah ditambahkan untuk menggabungkan fungsi umum tata letak dan menggambar. (I6e2a7)
  • Sekarang, scroller menampilkan perilaku gerakan lempar pada Android native. (b/147493715)
  • DrawBorder diganti dengan Border Modifier (Id335a)
  • Deteksi gestur Scroller telah disempurnakan. (I87d36)
  • Menambahkan metadata contentColor ke fondasi (Icd074)
  • Komponen material Scaffold telah ditambahkan. Scaffold mengimplementasikan struktur tata letak visual desain material dasar. (I7731b)
  • Menggunakan contentColor param Surface yang baru di Buttons (b/146210556)
  • textStyle.withOpacity() telah dihapus (I8cc9a)
  • Menambahkan subsistem Emphasis (Ife95c)
  • Sekarang, properti FAB FloatingActionButtonKt bersifat pribadi (I9c121)
  • Iterasi pertama dari Snackbar telah diimplementasikan (If1c08)
  • Dukungan awal untuk tema gelap telah ditambahkan (I6323a)
  • Ukuran, pusat, dan localToGlobal telah ditambahkan ke GestureScope(I1ea37)
  • Menambahkan API untuk injeksi gestur klik dua kali (I44902)
  • sendLongClick methods telah ditambahkan ke GestureScope (Ic7db9)
  • Mengonversikan (x, y) ke PxPosition dalam injeksi gestur (Ifefa4)
  • Kecepatan yang diinginkan telah ditambahkan ke gestur yang diinjeksikan (I3b9df)
  • Pengambilan bitmap telah ditambahkan ke dalam Compose test API (androidx.ui:ui-test). (I4e36c)
  • doClick telah dipindahkan ke GestureScope (I56211)
  • findBySubstring dan filter yang sesuai telah ditambahkan ke FindersKt. (Ief0b9)
  • Batas Pemilihan Teks Hingga 1 Karakter Telah Difaktorkan Ulang. (Iff757)
  • TextSpan telah dihapus (Iebece)
  • Class Composition dihapus dan digantikan class dasar Composer (Ieadbf)
  • Vektor defaultWidth/defaultHeight telah diubah untuk menggunakan Dp (Iad267)
  • Membuat grup dengan tepat pada panggilan composable inline (Ibf739)
  • Pembuatan prototipe tanda di Gesture Detectors telah diaktifkan. (I4b7b0)
  • Mengubah argumen maxLines dan elipsis dari nullable menjadi non-null (I46dac)
  • Sekarang, AnnotatedString menggunakan SpanStyle (Ib6d3e)
  • Dukungan pengubah untuk WithConstraints telah ditambahkan (b/145399789)
  • Meneruskan gaya paragraf ke TextDelegate (Id2d4a)
  • Class SpanStyle telah ditambahkan (Ifdb4f)
  • Menggunakan nilai default, alih-alih Float nullable di TextGeometricTransform. (I1bf00)
  • PreviewActivity telah ditambahkan ke androidx.ui:ui-tooling (Ic8988)
  • Sekarang, ModelObserver menjadi thread tunggal. (b/146144712)
  • Tolok ukur untuk ModelObserver telah ditambahkan (Ia176b)
  • Memanggil callback batalkan jika PointerInputNode dihapus dari hierarki. (I7112a)
  • Pengubah LayoutInflexible untuk Baris dan Kolom telah dihapus (I0d820)
  • Mewarisi pengubah tata letak dari ParentDataModifier (I49b6a)
  • Pengubah yang Digabungkan telah ditambahkan (I6f8df)
  • Pengubah Yang Diselaraskan telah ditambahkan (Ifc581)
  • Menambahkan Constraint Layout ke Compose (I175ad)

Faktor ulang

  • Grafis telah dipindahkan dari androidx.ui:ui-core ke androidx.ui:ui-graphics. (Ic17b0)
  • Modul dan paket Dp, IntPx, dan sebagainya telah diubah ke androidx.ui:ui-unit dan androidx.ui:ui-util. (I45fe4)
  • Memfaktorkan ulang efek ke @Composable (Ie2686)