Stay organized with collections Save and categorize content based on your preferences. Try the Compose way Jetpack Compose is the recommended UI toolkit for Android. Learn how to use touch and input in Compose. In Android, scrolling is typically achieved by using the ScrollView class. Any standard layout that might extend beyond the bounds of its container should be nested in a ScrollView to provide a scrollable view that's managed by the framework. Implementing a custom scroller should only be necessary for special scenarios. This lesson describes such a scenario displaying a scrolling effect in response to touch gestures using scrollers. Your app can use scrollers Scroller or OverScroller to collect the data needed to produce a scrolling animation in response to a touch event. They are similar, but OverScroller also includes methods for indicating to users that they've reached the content edges after a pan or fling gesture. Starting in Android 12 API level 31, the visual elements stretch and bounce back on a drag event, and fling and bounce back on a fling event. On Android 11 API level 30 and lower, the boundaries display a "glow" effect after a drag or fling gesture to the edge. The InteractiveChart sample uses the EdgeEffect class actually the EdgeEffectCompat class to display these overscroll effects. Note We recommend using OverScroller rather than Scroller for scrolling animations. OverScroller provides the best backward compatibility with older devices. Also, note that you generally only need to use scrollers when implementing scrolling yourself. ScrollView and HorizontalScrollView do all of this for you if you nest your layout within them. A scroller is used to animate scrolling over time, using platform-standard scrolling physics such as friction, velocity, and other qualities. The scroller itself doesn't actually draw anything. Scrollers track scroll offsets for you over time, but they don't automatically apply those positions to your view. It's your responsibility to get and apply new coordinates at a rate that will make the scrolling animation look smooth. Understand scrolling terminology "Scrolling" is a word that can take on different meanings in Android, depending on the context. Scrolling is the general process of moving the viewport that is, the 'window' of content you're looking at. When scrolling is in both the x and y axes, it's called panning. The sample application provided with this class, InteractiveChart, illustrates two different types of scrolling, dragging and flinging Dragging is the type of scrolling that occurs when a user drags their finger across the touch screen. Simple dragging is often implemented by overriding onScroll in For more discussion of dragging, see Dragging and Scaling. Flinging is the type of scrolling that occurs when a user drags and lifts their finger quickly. After the user lifts their finger, you generally want to keep scrolling moving the viewport, but decelerate until the viewport stops moving. Flinging can be implemented by overriding onFling in and by using a scroller object. This is the use case that is the topic of this lesson. Panning. When scrolling along both the X and Y axes, it's called panning. It's common to use scroller objects in conjunction with a fling gesture, but they can be used in any context where you want the UI to display scrolling in response to a touch event. For example, you could override onTouchEvent to process touch events directly, and produce a scrolling effect or a "snapping to page" animation in response to those touch events. Components that contain built-in scrolling implementations The following Android components contain built-in support for scrolling and overscrolling behavior RecyclerView ListView GridView ScrollView NestedScrollView HorizontalScrollView ViewPager ViewPager2 If your app needs to support scrolling and overscrolling inside a different component, do the following Create a custom, touch-based scrolling implementation. To support devices that run Android 12 and higher, implement the stretch overscroll effect. This section describes how to create your own scroller, if your app uses a component that doesn't contain built-in support for scrolling and overscrolling. The following snippet comes from the InteractiveChart sample provided with this class. It uses a GestureDetector, and overrides the method onFling. It uses OverScroller to track the fling gesture. If the user reaches the content edges after they perform the fling gesture, the container indicates that the user has reached the end of the content. The indication depends on the version of Android that a device runs On Android 12 and higher, the visual elements stretch and bounce back. On Android 11 and lower, the visual elements display a "glow" effect. Note The InteractiveChart sample app displays a chart that you can zoom, pan, scroll, and so on. In the following snippet, mContentRect represents the rectangle coordinates within the view that the chart will be drawn into. At any given time, a subset of the total chart domain and range are drawn into this rectangular area. mCurrentViewport represents the portion of the chart that is currently visible in the screen. Because pixel offsets are generally treated as integers, mContentRect is of the type Rect. Because the graph domain and range are decimal/float values, mCurrentViewport is of the type RectF. The first part of the snippet shows the implementation of onFling Kotlin // The current viewport. This rectangle represents the currently visible // chart domain and range. The viewport is the part of the app that the // user manipulates via touch gestures. private val mCurrentViewport = RectFAXIS_X_MIN, AXIS_Y_MIN, AXIS_X_MAX, AXIS_Y_MAX // The current destination rectangle in pixel coordinates into which the // chart data should be drawn. private lateinit var mContentRect Rect private lateinit var mScroller OverScroller private lateinit var mScrollerStartViewport RectF ... private val mGestureListener = object { override fun onDowne MotionEvent Boolean { // Initiates the decay phase of any active edge effects. if AXIS_X_MIN right AXIS_Y_MIN bottom - && && !mEdgeEffectRightActive { mEdgeEffectRightActive = true needsInvalidate = true } if canScrollY && currY - && && !mEdgeEffectBottomActive { mEdgeEffectBottomActive = true needsInvalidate = true } ... } } Java // Edge effect / overscroll tracking objects. private EdgeEffectCompat mEdgeEffectTop; private EdgeEffectCompat mEdgeEffectBottom; private EdgeEffectCompat mEdgeEffectLeft; private EdgeEffectCompat mEdgeEffectRight; private boolean mEdgeEffectTopActive; private boolean mEdgeEffectBottomActive; private boolean mEdgeEffectLeftActive; private boolean mEdgeEffectRightActive; Override public void computeScroll { boolean needsInvalidate = false; // The scroller isn't finished, meaning a fling or programmatic pan // operation is currently active. if { Point surfaceSize = computeScrollSurfaceSize; int currX = int currY = boolean canScrollX = > AXIS_X_MIN AXIS_Y_MIN - && && !mEdgeEffectRightActive { mEdgeEffectRightActive = true; needsInvalidate = true; } if canScrollY && currY - && && !mEdgeEffectBottomActive { mEdgeEffectBottomActive = true; needsInvalidate = true; } ... } Here is the section of the code that performs the actual zoom Kotlin lateinit var mZoomer Zoomer val mZoomFocalPoint = PointF ... // If a zoom is in progress either programmatically or via double // touch, performs the zoom. if { val newWidth Float = 1f - * val newHeight Float = 1f - * val pointWithinViewportX Float = - / val pointWithinViewportY Float = - / - newWidth * pointWithinViewportX, - newHeight * pointWithinViewportY, + newWidth * 1 - pointWithinViewportX, + newHeight * 1 - pointWithinViewportY constrainViewport needsInvalidate = true } if needsInvalidate { } Java // Custom object that is functionally similar to Scroller Zoomer mZoomer; private PointF mZoomFocalPoint = new PointF; ... // If a zoom is in progress either programmatically or via double // touch, performs the zoom. if { float newWidth = 1f - * float newHeight = 1f - * float pointWithinViewportX = - / float pointWithinViewportY = - / - newWidth * pointWithinViewportX, - newHeight * pointWithinViewportY, + newWidth * 1 - pointWithinViewportX, + newHeight * 1 - pointWithinViewportY; constrainViewport; needsInvalidate = true; } if needsInvalidate { } This is the computeScrollSurfaceSize method that's called in the above snippet. It computes the current scrollable surface size, in pixels. For example, if the entire chart area is visible, this is simply the current size of mContentRect. If the chart is zoomed in 200% in both directions, the returned size will be twice as large horizontally and vertically. Kotlin private fun computeScrollSurfaceSize Point { return Point * AXIS_X_MAX - AXIS_X_MIN / * AXIS_Y_MAX - AXIS_Y_MIN / } Java private Point computeScrollSurfaceSize { return new Point int * AXIS_X_MAX - AXIS_X_MIN / int * AXIS_Y_MAX - AXIS_Y_MIN / } For another example of scroller usage, see the source code for the ViewPager class. It scrolls in response to flings, and uses scrolling to implement the "snapping to page" animation. Starting in Android 12, EdgeEffect adds the following APIs for implementing the stretch overscroll effect getDistance onPullDistance To provide the best user experience with stretch overscroll, do the following When the stretch animation is in effect when the user touches the contents, register the touch as a "catch". The user stops the animation and begins manipulating the stretch again. When the user moves their finger in the opposite direction of the stretch, release the stretch until it's fully gone, and then begin scrolling. When the user flings during a stretch, fling the EdgeEffect to enhance the stretch effect. Catch the animation When a user catches an active stretch animation, returns 0. This condition indicates that the stretch should be manipulated by the touch motion. In most containers, the catch is detected in onInterceptTouchEvent, as shown in the following code snippet Kotlin override fun onInterceptTouchEventev MotionEvent Boolean { ... when action and { -> ... isBeingDragged = > 0f > 0f ... } return isBeingDragged } Java Override public boolean onInterceptTouchEventMotionEvent ev { ... switch action & { case ... mIsBeingDragged = > 0 > 0; ... } } In the preceding example, onInterceptTouchEvent returns true when mIsBeingDragged is true, so it's sufficient to consume the event before the child has an opportunity to consume it. Release the overscroll effect It's important to release the stretch effect prior to scrolling to prevent the stretch from being applied to the scrolling content. The following code sample applies this best practice Kotlin override fun onTouchEventev MotionEvent Boolean { val activePointerIndex = when { -> val x = val y = var deltaY = y - mLastMotionY val pullDistance = deltaY / height val displacement = x / width if deltaY 0f { deltaY -= height * pullDistance, displacement; } if deltaY > 0f && > 0f { deltaY += height * -pullDistance, 1 - displacement; } ... } Java Override public boolean onTouchEventMotionEvent ev { final int actionMasked = switch actionMasked { case final float x = final float y = float deltaY = y - mLastMotionY; float pullDistance = deltaY / getHeight; float displacement = x / getWidth; if deltaY 0 { deltaY -= getHeight * pullDistance, displacement; } if deltaY > 0 && > 0 { deltaY += getHeight * -pullDistance, 1 - displacement; } ... When the user is dragging, you must consume the EdgeEffect pull distance before you pass the touch event to a nested scrolling container or drag the scroll. In the preceding code sample, getDistance returns a positive value when an edge effect is being displayed and can be released with motion. When the touch event releases the stretch, it is first consumed by the EdgeEffect so that it will be completely released before other effects, such as nested scrolling, are displayed. You can use getDistance to learn how much pull distance is required to release the current effect. Unlike onPull, onPullDistance returns the consumed amount of the passed delta. Starting in Android 12, if onPull or onPullDistance are passed negative deltaDistance values when getDistance is 0, the stretch effect doesn't change. On Android 11 and lower, onPull allows negative values for the total distance to show glow effects. Opt out of overscroll You can opt out of overscroll in your layout file or programmatically, as shown in the following sections Opt out in your layout file The following snippet shows the androidoverScrollMode set in the layout file ... Opt out programmatically The following code snippet shows how to opt out programmatically Kotlin = Java
MenuSetting/Pengaturan Scroll ke bawah hingga ditemukan About Phone . Cari Build Number, selanjutnya sentuh 7x secara berurutan. Agar lebih mudah anda bisa gunakan fitur search (pada android 7). Lalu ketikkan build number . Jika telah berhasil melakukan ini, anda lanjutkan dengan Run Aplikasi di Android Studio. Buka kembali Android Studio anda.
Langsung aja ya boss seperti tutorial yang pertama yaitu membuat Hello Toast, ada beberapa langkah yang sama diawal, langsung ajaaa sikattt Sama saja bukan hehee Selanjutnya adalah penampilan objek yang sudah dirangkai Buka script di bagian text pada sebelah design, isi script dan anda bisa juga mendownload pada link ini. Ketikkan kode XML seperti berikut ini androidlayout_width=”match_parent” androidlayout_height=”match_parent” androidpaddingBottom=”dimen/activity_vertical_margin” androidpaddingLeft=”dimen/activity_horizontal_margin” androidpaddingRight=”dimen/activity_horizontal_margin” androidpaddingTop=”dimen/activity_vertical_margin” toolscontext=” Selanjutnya membuat untuk mengatur article_header, article_subheader, dan article sesuai dengan text yang dinginkan, ScrollingText Beatles Anthology Vol. 1 Behind That Locked Door Beatles Rarities! In a vault deep inside Abbey Road Studios in London — protected by an unmarked, triple-locked, police-alarmed door — are something like 400 hours of unreleased Beatles recordings, starting from June 2, 1962 and ending with the very last tracks recorded for the Let It Be album. The best of the best were released by Apple Records in the form of the 3-volume Anthology series. \n\n This volume starts with the first new Beatle song, “Free as a Bird” based on a John Lennon demo, found only on the bootleg The Lost Lennon Tapes Vol. 28, and covers the very earliest historical recordings, outtakes from the first albums, and live recordings from early concerts and BBC Radio sessions. \n\n Highlights include \n\n Cry for a Shadow – Many a Beatle fanatic started down the bootleg road, like I did, with a first listen to this song. Originally titled “Beatle Bop” and recorded in a single session that yielded four songs the other three featured Tony Sheridan with the Beatles as a backing band, “Cry for a Shadow” is an instrumental written by Lennon and Harrison, which makes it unique to this day. John Lennon plays rhythm guitar, George Harrison plays lead guitar, Paul McCartney plays bass, and Pete Best plays drums. The sessions were produced by Bert Kaempfert in Hamburg, Germany, during the Beatles’ second visit from April through July of 1961 to play in the Reeperbahn-section clubs. \n\n My Bonnie and Ain’t She Sweet — At the same session, the Beatles played on “My Bonnie” the first-ever single with Beatles playing, as the backing band for English singer Tony Sheridan, originally a member of the Jets. The popularity of this single in Liverpool brought the Beatles to the attention of Brian Epstein, who worked in the NEMS record store and tried to meet demand for the disc. John Lennon then sings a fine “Ain’t She Sweet” his first-ever released vocal. \n\n Searchin — A Jerry Leiber – Mike Stoller comedy song that was a hit for the Coasters in 1957, and a popular live favorite of the Beatles. The Coasters also had a hit with “Besame Mucho” and the Beatles covered that song as well. Ringo Starr had by now replaced Pete Best on drums. The high falsetto is George, who also plays a hesitant lead guitar. This is from their first audition for Decca Records in London on Jan 1., 1962, live in the studio. The Grateful Dead would later cover “Searchin” with a similar arrangement, Pigpen doing the Paul vocals. A live version is available on bootlegs featuring the Dead joined by the Beach Boys! \n\n Love Me Do — An early version of the song, play \n\n She Loves You – Till There Was You – Twist and Shout — Live at the Princess Wales Theatre by Leicester Square in London, attended by the Queen. “Till There Was You” by Meredith Wilson is from the musical The Music Man and a hit for Peggy Lee in 1961. Before playing it, Paul said it was recorded by his favorite American group, “Sophie Tucker” which got some laughs. At the end, John tells the people in the cheaper seats to clap their hands, and the rest to “rattle your jewelry” and then announces “Twist and Shout” a song by Bert Russell and Phil Medley that was first recorded in 1962 by the Isley Brothers. A film of the performance shows the Queen smiling at John’s remark. \n\n Leave My Kitten Alone — One of the lost Beatle songs recorded during the “Beatles For Sale” sessions but never released. This song, written by Little Willie John, Titus Turner, and James McDougal, was a 1959 R&B hit for Little Willie John and covered by Johnny Preston before the Beatles tried it and shelved it. A reference to a “big fat bulldog” may have influenced John’s “Hey Bulldog” Yellow Submarine album, which is a similar rocker. \n\n One After 909 — A song recorded for the Let It Be album was actually worked on way back in the beginning, six years earlier. This take shows how they did it much more slowly, with an R&B feel to it. Add Comment Dan ini hasilnyaaCaraMembuat Scroll Bar di Postingan Blog - Kali ini saya akan share artikel mengenai Cara Membuat Scroll Bar Pada Postingan Blog. Sedikit penjelasan dan pengetahuan untuk sobat tentang definisi serta fungsi dan kegunaanya Scroll Bar adalah untuk memudahkan kita apabila ada kode atau tulisan yang sangat panjang agar tidak memakan terlalu banyak tempat atau bisa juga dibilang untuk Assalamualaikum Warahmatullahi Wabarakatuh. Pada materi berikut ini saya akan membahas dasar-dasar penggunaan widget ScrollView untuk pengembangan aplikasi Android menggunakan Android Studio. ScrollView digunakan agar konten pada layar aplikasi dapat di Scroll secara vertikal, karena jika tidak mengguanakan ScrollView, jika konten kita melebihi ukuran layar maka konten tersebut akan terpotong. ScrollView sangat penting sekali untuk pengembangan aplikasi android, hampi semua aplikasi yang di kembangkan menggunakan ScrollView. Didalam Android Studio terdapat beberapa jenis ScrollView, yaitu ScrollView Vertikal, HorizontalScrollView dan Nested ScrollView ScrollView bersarang. Materi lainnya yang direkomendasikan Cara Menerapkan Show/Hide Password di Android Studio Belajar Membuat Aplikasi Countdown Timer di Android Belajar Menggunakan CheckedTextView di Android Studio Cara Membuat Circle Image pada Android Studio Cara Membuat Image Gallery Menggunakan GridView Tetapi disini kita hanya akan membahas mengenai penggunaan ScrollView secara vertikal saja, untuk komponen layout didalam activity. Penjelasan lebih lanju mengenai jenis ScrollView lainnya akan saya dibahas di postingan berikutnya. Belajar Cara Membuat ScrollView di Android Studio 1 Buka aplikasi Android Studio kalian, buat project baru. 2 Pada contoh program berikut ini, misalnya kita ingin membuat sebuah teks panjang menggunakan widget TextView dan sebuah Button dibawahnya. Untuk membuat teks yang panjang tersebut kita akan menggunakan data String didalam file buka folder res > values > Disini kalian buat variable string baru yang isinya teks panjang, misalnya seperti berikut ini. Java adalah bahasa pemrograman yang dapat dijalankan di berbagai komputer termasuk telepon genggam. Bahasa ini awalnya dibuat oleh James Gosling saat masih bergabung di Sun Microsystems saat ini merupakan bagian dari Oracle dan dirilis tahun 1995. Bahasa ini banyak mengadopsi sintaksis yang terdapat pada C dan C++ namun dengan sintaksis model objek yang lebih sederhana serta dukungan rutin-rutin aras bawah yang minimal. Aplikasi-aplikasi berbasis java umumnya dikompilasi ke dalam p-code bytecode dan dapat dijalankan pada berbagai Mesin Virtual Java JVM. Java merupakan bahasa pemrograman yang bersifat umum/non-spesifik general purpose, dan secara khusus didisain untuk memanfaatkan dependensi implementasi seminimal mungkin. Karena fungsionalitasnya yang memungkinkan aplikasi java mampu berjalan di beberapa platform sistem operasi yang berbeda, java dikenal pula dengan slogannya, "Tulis sekali, jalankan di mana pun". Saat ini java merupakan bahasa pemrograman yang paling populer digunakan, dan secara luas dimanfaatkan dalam pengembangan berbagai jenis perangkat lunak aplikasi ataupun aplikasi Didalam file tersebut kita membuat variable baru bernama teks_panjang yang isinya mengenai java, tapi kalian bisa sesuaikan sendiri. 3 Lalu pada kita tambahkan TextView dan Button yang di bungkus kedalam ScrollView. seperti berikut ini. Didalam ScrollView tersebut perlu kita tambahkan ViewGroup seperti LinearLayout vertical, lalu kita tambahkan atribut androidtext="string/teks_panjang" didalam TextView, untuk menempilkan teks yang telah kita buat pada file Demo Catat bahwa sebuah TextView tidak memerlukan ScrollView jika hanya ingin agar teks didalamnya dapat di scroll. Kita hanya cukup gunakan artibut scrollbars dan tentukan nilannya menjadi vartical, seperti ini Lalu pada class Java-nya tambahkan baris kode berikut inipackage /* Dibuat Oleh WILDAN M ATHOILLAH */ import import import import public class MainActivity extends AppCompatActivity{ Override protected void onCreateBundle savedInstanceState { setContentView //Inisialisasi dan Deklarasi TextView TextView textView = findViewById //Menambahkan method Scrolling agar TextView dapat di Scroll ScrollingMovementMethod; } } Itu diperlukan jika kita hanya ingin TextView saja yang dapat di Scroll. Sekian dari saya, mohon maaf bila ada kesalahan, jika ada yang ingin ditanyaka, silakan isi kolom komentar dibawah ini. Wassalamualaikum Warahmatullahi Wabarakatuh. Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.
KotakPertama. Desain yang pertama ini simple dan kodenya sangat singkat, cocok bagi Anda yang tidak suka hal rumit. untuk menerapkan di blog, tempel kode dibawah ini di Mode HTML, bukan Compose.
Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda. 1. Sebelum memulai Dalam codelab ini, Anda akan mempelajari cara membuat daftar yang dapat di-scroll di aplikasi menggunakan Jetpack Compose. Anda akan mengerjakan aplikasi Affirmations, yang menampilkan daftar afirmasi yang dipasangkan dengan gambar indah untuk membawa hal positif ke hari Anda. Data sudah ada, Anda hanya perlu mengambil data tersebut dan menampilkannya di UI. Prasyarat Pemahaman tentang Daftar di Kotlin Pengalaman membuat tata letak dengan Jetpack Compose Pengalaman menjalankan aplikasi di perangkat atau emulator Yang akan Anda pelajari Cara membuat kartu Desain Material menggunakan Jetpack Compose Cara membuat daftar yang dapat di-scroll menggunakan Jetpack Compose Yang akan Anda build Anda akan mengambil aplikasi yang sudah ada dan menambahkan daftar yang dapat di-scroll ke UI Produk jadi akan terlihat seperti ini Yang akan Anda butuhkan Komputer dengan akses internet, browser web, dan Android Studio Akses ke GitHub Mendownload kode awal Di Android Studio, buka folder basic-android-kotlin-compose-training-affirmations. Buka halaman repositori GitHub yang disediakan untuk project. Pastikan nama cabang cocok dengan nama cabang yang ditentukan dalam codelab. Misalnya, dalam screenshot berikut, nama cabang adalah main utama. Di halaman GitHub project, klik tombol Code yang akan menampilkan pop-up. Pada pop-up, klik tombol Download ZIP untuk menyimpan project di komputer. Tunggu download selesai. Temukan file di komputer Anda mungkin di folder Downloads. Klik dua kali pada file ZIP untuk mengekstraknya. Tindakan ini akan membuat folder baru yang berisi file project. Membuka project di Android Studio Mulai Android Studio. Di jendela Welcome to Android Studio, klik Open. Catatan Jika Android Studio sudah terbuka, pilih opsi menu File > Open. Di file browser, buka lokasi folder project yang telah diekstrak kemungkinan ada di folder Downloads. Klik dua kali pada folder project tersebut. Tunggu Android Studio membuka project. Klik tombol Run untuk mem-build dan menjalankan aplikasi. Pastikan aplikasi di-build seperti yang diharapkan. 2. Menonton video tutorial coding langsung Opsional Jika Anda ingin menonton salah satu instruktur kursus saat tengah menyelesaikan codelab, putar video di bawah. Sebaiknya luaskan video ke layar penuh dengan ikon ini di pojok kanan bawah video agar Anda dapat melihat Android Studio dan kodenya dengan lebih jelas. Langkah ini opsional. Anda juga dapat melewati video dan langsung memulai petunjuk codelab. 3. Membuat class data item daftar Membuat class data untuk Affirmation Di aplikasi Android, daftar terdiri dari item daftar. Untuk data tunggal, ini bisa berupa hal sederhana seperti string atau bilangan bulat. Untuk item daftar yang memiliki beberapa data, seperti gambar dan teks, Anda memerlukan class yang berisi semua properti ini. Class data adalah jenis class yang hanya berisi properti. Class tersebut dapat menyediakan beberapa metode utilitas agar berfungsi dengan properti tersebut. Buat paket baru di bagian Namai paket baru tersebut dengan model. Paket model akan berisi model data yang akan direpresentasikan oleh class data. Class data tersebut akan terdiri dari properti yang mewakili informasi yang relevan dengan yang akan disebut "Affirmation", yang akan terdiri dari resource string dan resource gambar. Paket adalah direktori yang berisi beberapa class dan bahkan direktori lainnya. Buat class baru di paket Namai class baru tersebut dengan Affirmation dan jadikan Data Class. Setiap Affirmation terdiri dari satu gambar dan satu string. Buat dua properti val di class data Affirmation. Salah satunya harus disebut stringResourceId dan yang lainnya imageResourceId. Keduanya harus berupa bilangan bulat. data class Affirmation val stringResourceId Int, val imageResourceId Int Beri tag pada properti stringResourceId dengan anotasi StringRes dan beri tag imageResourceId dengan DrawableRes. stringResourceId mewakili ID untuk teks afirmasi yang disimpan di resource string. imageResourceId mewakili ID untuk gambar afirmasi yang disimpan di resource drawable. data class Affirmation StringRes val stringResourceId Int, DrawableRes val imageResourceId Int Sekarang, buka file di paket dan hapus tanda komentar pada konten class Datasource. class Datasource { fun loadAffirmations List { return listOf Affirmation Affirmation Affirmation Affirmation Affirmation Affirmation Affirmation Affirmation Affirmation Affirmation } } 4. Menambahkan daftar ke aplikasi Membuat kartu item daftar Aplikasi ini dimaksudkan untuk menampilkan daftar afirmasi. Langkah pertama dalam mengonfigurasi UI untuk menampilkan daftar adalah membuat item daftar. Setiap item afirmasi terdiri dari gambar dan string. Data untuk setiap item ini dilengkapi dengan kode awal, dan Anda akan membuat komponen UI untuk menampilkan item tersebut. Item akan terdiri dari composable Card, yang berisi Image dan composable Text. Di Compose, Card adalah platform yang menampilkan konten dan tindakan dalam satu penampung. Kartu Affirmation akan terlihat seperti ini Kartu ini menampilkan gambar dengan beberapa teks di bawahnya. Tata letak vertikal ini dapat dicapai menggunakan composable Column yang digabungkan dalam composable Card. Anda dapat mencobanya sendiri, atau ikuti langkah-langkah di bawah untuk melakukannya. Buka file Buat metode baru di bawah metode AffirmationApp, yang disebut AffirmationCard, dan anotasikan dengan anotasi Composable. Composable fun AffirmationApp { AffirmationsTheme { } } Composable fun AffirmationCard { } Edit tanda tangan metode untuk mengambil objek Affirmation sebagai parameter. Objek Affirmation berasal dari paket model. Composable fun AffirmationCardaffirmation Affirmation { } Tambahkan parameter modifier ke tanda tangan. Setel nilai default Modifier untuk parameter. Composable fun AffirmationCardaffirmation Affirmation, modifier Modifier = Modifier { } Di dalam metode AffirmationCard, panggil composable Card. Teruskan parameter berikut modifier dan elevation. Teruskan objek Modifier dengan atribut padding yang disetel ke untuk parameter modifier. Teruskan nilai untuk elevation. Properti elevation akan dibahas secara lebih mendetail nanti. Composable fun AffirmationCardaffirmation Affirmation, modifier Modifier = Modifier { Cardmodifier = elevation = { } } Tambahkan composable Column di dalam composable Card. Item dalam composable Column menyusun dirinya sendiri secara vertikal di UI. Ini memungkinkan Anda menempatkan gambar di atas teks terkait. Sebaliknya, composable Row mengatur item yang ditampung secara horizontal. Composable fun AffirmationCardaffirmation Affirmation, modifier Modifier = Modifier { Cardmodifier = elevation = { Column { } } } Tambahkan composable Image di dalam isi lambda dari composable Column. Ingat kembali bahwa composable Image selalu memerlukan resource untuk ditampilkan, dan contentDescription. Resource ini harus berupa painterResource yang diteruskan ke parameter painter. Metode painterResource akan memuat vektor drawable atau format aset raster seperti PNG. Selain itu, teruskan stringResource untuk parameter contentDescription. Composable fun AffirmationCardaffirmation Affirmation, modifier Modifier = Modifier { Cardmodifier = elevation = { Column { Image painter = painterResource contentDescription = stringResource } } } Selain parameter painter dan contentDescription, teruskan modifier dan contentScale. contentScale menentukan cara gambar harus diskalakan dan ditampilkan. Objek Modifier harus memiliki atribut fillMaxWidth yang disetel dan tinggi contentScale harus Composable fun AffirmationCardaffirmation Affirmation, modifier Modifier = Modifier { Cardmodifier = elevation = { Column { Image painter = painterResource contentDescription = stringResource modifier = Modifier .fillMaxWidth .height contentScale = } } } Di dalam Column, buat composable Text setelah composable Image. Teruskan stringResource dari ke parameter text, teruskan objek Modifier dengan atribut padding yang disetel ke dan setel tema teks dengan meneruskan ke parameter style. Composable fun AffirmationCardaffirmation Affirmation, modifier Modifier = Modifier { Cardmodifier = elevation = { Column { Image painter = painterResource contentDescription = stringResource modifier = Modifier .fillMaxWidth .height contentScale = Text text = stringResource modifier = style = } } } Pratinjau composable AffirmationCard Kartu ini adalah inti dari UI untuk aplikasi Affirmations, dan Anda telah bekerja keras untuk membuatnya. Untuk memeriksa apakah kartu sudah benar, Anda dapat membuat composable yang dapat dilihat pratinjaunya tanpa meluncurkan seluruh aplikasi. Buat metode pribadi bernama AffirmationCardPreview. Anotasikan metode dengan Preview dan Composable. Preview Composable private fun AffirmationCardPreview { } Di dalam metode, panggil composable AffirmationCard, dan teruskan objek Affirmation baru dengan resource string dan resource drawable yang diteruskan ke konstruktornya. Preview Composable private fun AffirmationCardPreview { AffirmationCardAffirmation } Buka tab Split dan Anda akan melihat pratinjau AffirmationCard. Jika perlu, klik Build & Refresh di panel Design untuk menampilkan pratinjau. Membuat daftar Komponen item daftar adalah elemen penyusun daftar. Setelah item daftar dibuat, Anda dapat memanfaatkannya untuk membuat komponen daftar itu sendiri. Buat fungsi yang disebut AffirmationList, anotasikan dengan anotasi Composable, dan deklarasikan List objek Affirmation sebagai parameter di tanda tangan metode. Composable private fun AffirmationListaffirmationList List { } Deklarasikan objek modifier sebagai parameter dalam tanda tangan metode dengan nilai default Modifier. Composable private fun AffirmationListaffirmationList List, modifier Modifier = Modifier { } Di Jetpack Compose, daftar yang dapat di-scroll dapat dibuat menggunakan composable LazyColumn. Perbedaan antara LazyColumn dan Column adalah bahwa Column harus digunakan saat Anda memiliki sedikit item untuk ditampilkan, karena Compose memuat semuanya sekaligus. Column hanya dapat menyimpan composable dengan jumlah yang tetap atau telah ditentukan. LazyColumn dapat menambahkan konten on demand, yang menjadikannya cocok untuk daftar panjang, terutama jika panjang daftar tidak diketahui. LazyColumn juga menyediakan scroll secara default, tanpa kode tambahan. Deklarasikan composable LazyColumn di dalam fungsi AffirmationList. Composable private fun AffirmationListaffirmationList List, modifier Modifier = Modifier { LazyColumn { } } Dalam isi lambda LazyColumn, panggil metode items dan teruskan affirmationList. Metode items adalah cara Anda menambahkan item ke LazyColumn. Metode ini agak unik untuk composable ini, dan bukan praktik umum untuk sebagian besar composable. Composable private fun AffirmationListaffirmationList List, modifier Modifier = Modifier { LazyColumn { itemsaffirmationList{ } } } Panggilan ke metode items memerlukan fungsi lambda. Dalam fungsi tersebut, tetapkan parameter affirmation yang mewakili satu item afirmasi dari affirmationList. Composable private fun AffirmationListaffirmationList List, modifier Modifier = Modifier { LazyColumn { itemsaffirmationList{ affirmation -> } } } Untuk setiap afirmasi dalam daftar, panggil composable AffirmationCard, dan teruskan affirmation. Composable private fun AffirmationListaffirmationList List, modifier Modifier = Modifier { LazyColumn { itemsaffirmationList{ affirmation -> AffirmationCardaffirmation } } } Menampilkan daftar Di lambda, panggil composable AffirmationList, lalu teruskan DataSource.loadAffirmations ke parameter affirmationList. Composable fun AffirmationApp { AffirmationsTheme { AffirmationListaffirmationList = Datasource.loadAffirmations } } Jalankan aplikasi Affirmations di perangkat atau emulator dan lihat produk yang sudah selesai. 5. Mendapatkan kode solusi Untuk mendownload kode codelab yang sudah selesai, Anda dapat menggunakan perintah git berikut $ git clone $ cd basic-android-kotlin-compose-training-affirmations $ git checkout main Atau, Anda dapat mendownload repositori sebagai file ZIP, lalu mengekstraknya, dan membukanya di Android Studio. Jika Anda ingin melihat kode solusi, lihat di GitHub. 6. Kesimpulan Anda sekarang tahu cara membuat kartu, item daftar, dan daftar yang dapat di-scroll menggunakan Jetpack Compose. Ingatlah bahwa ini hanyalah alat dasar untuk membuat daftar. Anda dapat menyalurkan kreativitas dan menyesuaikan item daftar sesuka hati. Ringkasan Gunakan composable Card untuk membuat item daftar. Ubah UI yang ada dalam composable Card. Buat daftar yang dapat di-scroll menggunakan composable LazyColumn. Buat daftar menggunakan item daftar kustom. Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
K5FGs6.