Komponen Material (MDC) membantu developer menerapkan Desain Material. Dibuat oleh tim engineer dan desainer UX di Google, MDC memiliki banyak komponen UI yang indah dan fungsional serta tersedia untuk Android, iOS, web, dan Flutter. material.io/develop |
Di codelab MDC-103, Anda menyesuaikan warna, ketinggian, dan tipografi Komponen Material (MDC) untuk memberikan gaya ke aplikasi Anda.
Komponen di sistem Desain Material menjalankan tugas yang telah ditentukan sebelumnya dan memiliki karakteristik tertentu, seperti tombol. Namun, tombol bukan sekadar cara bagi pengguna untuk melakukan tindakan. Tombol juga merupakan ekspresi visual dari bentuk, ukuran, dan warna yang memberi tahu pengguna bahwa ini adalah hal yang interaktif dan akan terjadi sesuatu saat disentuh atau diklik.
Pedoman Desain Material menjelaskan komponen dari sudut pandang desainer. Pedoman ini menjelaskan berbagai fungsi dasar yang tersedia di seluruh platform, serta elemen anatomi yang menyusun setiap komponen. Misalnya, tampilan latar berisi lapisan belakang dan kontennya, lapisan depan dan kontennya, aturan gerakan, dan opsi tampilan. Setiap komponen ini dapat disesuaikan untuk kebutuhan, kasus penggunaan, dan konten setiap aplikasi. Sebagian besar dari bagian ini adalah tampilan, kontrol, dan fungsi tradisional dari SDK platform Anda.
Meskipun pedoman Desain Material menyebutkan banyak komponen, tidak semua komponen tersebut adalah kandidat yang baik untuk kode yang dapat digunakan kembali, dan karena itu tidak ditemukan di MDC. Anda dapat membuat pengalaman ini sendiri untuk mencapai gaya yang disesuaikan untuk aplikasi Anda, semua menggunakan kode tradisional.
Yang akan Anda bangun
Dalam codelab ini, Anda akan menambahkan latar belakang ke Shrine. Menu ini akan memfilter produk yang ditampilkan dalam petak asimetris menurut kategori. Anda akan menggunakan:
- Bentuk
- Gerakan
- Kelas Android SDK tradisional
Komponen MDC-Android dalam codelab ini
- Bentuk
Yang Anda butuhkan
- Pengetahuan dasar tentang pengembangan Android
- Android Studio (download di sini jika Anda belum memilikinya)
- Emulator atau perangkat Android (tersedia melalui Android Studio)
- Kode contoh (lihat langkah berikutnya)
Bagaimana Anda menilai tingkat pengalaman Anda membuat aplikasi Android?
Melanjutkan dari MDC-103?
Jika Anda sudah menyelesaikan MDC-103, kode Anda seharusnya siap untuk codelab ini. Langsung ke langkah 3.
Memulai dari awal?
Mendownload aplikasi codelab awal
Aplikasi awal terletak di direktori material-components-android-codelabs-104-starter/kotlin
. Pastikan untuk cd
ke direktori tersebut sebelum memulai.
...atau meng-clone codelab dari GitHub
Untuk meng-clone codelab ini dari GitHub, jalankan perintah berikut:
git clone https://github.com/material-components/material-components-android-codelabs cd material-components-android-codelabs/ git checkout 104-starter
Memuat kode awal di Android Studio
- Setelah wizard penyiapan selesai dan jendela Welcome to Android Studio ditampilkan, klik Open an existing Android Studio project. Buka direktori tempat Anda menginstal kode contoh, lalu pilih kotlin -> shrine (atau telusuri shrine di komputer Anda) untuk membuka project Shipping.
- Tunggu Android Studio mem-build dan menyinkronkan project, seperti yang ditunjukkan oleh indikator aktivitas di bagian bawah jendela Android Studio.
- Pada tahap ini, Android Studio dapat memunculkan beberapa error build karena alat build atau Android SDK tidak ada, seperti yang ditampilkan di bawah. Ikuti petunjuk di Android Studio untuk menginstal/mengupdate versi ini dan menyinkronkan project Anda.
Menambahkan dependensi project
Project memerlukan dependensi pada support library MDC Android. Kode contoh yang Anda download seharusnya sudah mencantumkan dependensi ini, tetapi sebaiknya lakukan langkah-langkah berikut untuk memastikannya.
- Buka file
build.gradle
modulapp
dan pastikan blokdependencies
menyertakan dependensi pada MDC Android:
api 'com.google.android.material:material:1.1.0-alpha06'
- (Opsional) Jika perlu, edit file
build.gradle
untuk menambahkan dependensi berikut dan sinkronkan project.
dependencies { api 'com.google.android.material:material:1.1.0-alpha06' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.android.volley:volley:1.1.1' implementation 'com.google.code.gson:gson:2.8.5' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21" testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:core:1.1.0' androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test:runner:1.2.0-alpha05' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha05' }
Menjalankan aplikasi awal
|
Berhasil! Anda akan melihat aplikasi Shrine berjalan di perangkat Anda.
Latar belakang adalah permukaan paling belakang aplikasi, yang muncul di belakang semua konten dan komponen lainnya. Hal ini terdiri dari dua platform: lapisan belakang (yang menampilkan tindakan dan filter) dan lapisan depan (yang menampilkan konten). Anda dapat menggunakan latar belakang untuk menampilkan tindakan dan informasi yang interaktif, seperti navigasi atau filter konten.
Menyembunyikan konten petak
Di shr_product_grid_fragment.xml
, tambahkan atribut android:visibility="gone"
ke NestedScrollView
untuk menghapus konten produk sementara:
shr_product_grid_fragment.xml
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:background="@color/productGridBackgroundColor"
android:elevation="8dp"
android:visibility="gone"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
Kita akan memasang latar belakang di wilayah ini. Untuk menghindari tampilan pembagian antara panel aplikasi atas dan konten menu yang muncul di latar belakang, kita akan membuat latar belakang memiliki warna yang sama dengan panel aplikasi atas.
Di shr_product_grid_fragment.xml
, tambahkan kode berikut sebagai elemen pertama di FrameLayout
root Anda, sebelum AppBarLayout
:
shr_product_grid_fragment.xml
<LinearLayout
style="@style/Widget.Shrine.Backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingTop="100dp"
android:paddingBottom="100dp">
</LinearLayout>
Di styles.xml
, tambahkan kode berikut:
styles.xml
<style name="Widget.Shrine.Backdrop" parent="">
<item name="android:background">?attr/colorAccent</item>
</style>
Bagus! Anda telah menambahkan latar belakang yang indah ke UI Shrine. Selanjutnya, kita akan menambahkan menu.
Menambahkan menu
Pada dasarnya, menu adalah daftar tombol teks. Kita akan menambahkan satu di sini.
Buat file tata letak baru bernama shr_backdrop.xml
di direktori res -> layout
, lalu tambahkan kode berikut:
shr_backdrop.xml
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_featured_label" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_apartment_label" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_accessories_label" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_shoes_label" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_tops_label" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_bottoms_label" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_dresses_label" />
<View
android:layout_width="56dp"
android:layout_height="1dp"
android:layout_margin="16dp"
android:background="?android:attr/textColorPrimary" />
<com.google.android.material.button.MaterialButton
style="@style/Widget.Shrine.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/shr_account_label" />
</merge>
Lalu, tambahkan daftar ini ke LinearLayout
yang baru saja Anda tambahkan di shr_product_grid_fragment.xml
menggunakan tag <include>
:
shr_product_grid_fragment.xml
<LinearLayout
style="@style/Widget.Shrine.Backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingTop="88dp">
<include layout="@layout/shr_backdrop" />
</LinearLayout>
Build dan jalankan. Layar utama Anda akan terlihat seperti ini:
Sekarang kita telah menyiapkan latar belakang. Mari kita tampilkan kembali konten yang kita sembunyikan sebelumnya.
Sebelum kami melakukan perubahan apa pun pada Shrine dalam codelab ini, konten produk utama terletak di permukaan paling belakang. Dengan menambahkan latar belakang, konten ini kini lebih ditekankan karena muncul di depan latar belakang tersebut.
Menambahkan lapisan baru
Kita harus menampilkan kembali lapisan petak produk. Hapus atribut android:visibility="gone"
dari NestedScrollView
Anda:
shr_product_grid_fragment.xml
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:background="@color/productGridBackgroundColor"
android:elevation="8dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
Mari kita beri gaya lapisan depan dengan potongan di pojok kiri atas. Desain Material mengacu pada jenis penyesuaian ini sebagai bentuk. Permukaan material dapat ditampilkan dalam berbagai bentuk. Bentuk menambahkan penekanan dan gaya pada platform dan dapat digunakan untuk mengekspresikan branding. Bentuk material dapat memiliki sudut dan tepi yang melengkung atau miring, serta berapa pun jumlah sisinya. Bentuknya dapat bersifat simetris atau tidak beraturan.
Menambahkan bentuk
Ubah bentuk petak. Kita telah menyediakan latar belakang bentuk kustom, tetapi bentuk hanya ditampilkan dengan benar di Android Marshmallow dan yang lebih baru. Kita dapat menyetel latar belakang shr_product_grid_background_shape
di NestedScrollView
Anda hanya untuk Android Marshmallow dan yang lebih baru. Pertama, tambahkan id
ke NestedScrollView
agar kita dapat mereferensikannya dalam kode, sebagai berikut:
shr_product_grid_fragment.xml
<androidx.core.widget.NestedScrollView
android:id="@+id/product_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:background="@color/productGridBackgroundColor"
android:elevation="8dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
Kemudian, tetapkan latar belakang secara terprogram di ProductGridFragment.kt
. Tambahkan logika berikut untuk menyetel latar belakang ke akhir onCreateView()
, tepat sebelum pernyataan return:
ProductGridFragment.kt
// Set cut corner background for API 23+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
view.product_grid.background = context?.getDrawable(R.drawable.shr_product_grid_background_shape)
}
Terakhir, kita akan memperbarui resource warna productGridBackgroundColor
(juga digunakan oleh latar belakang bentuk kustom) sebagai berikut:
colors.xml
<color name="productGridBackgroundColor">#FFFBFA</color>
Build dan jalankan:
Kita telah memberikan bentuk gaya visual kustom pada platform utama Shrine. Karena ketinggian platform, pengguna dapat melihat bahwa terdapat sesuatu di belakang lapisan putih di depan. Mari tambahkan gerakan agar pengguna dapat melihat apa yang ada di sana: menu.
Gerakan adalah cara untuk membuat aplikasi Anda terlihat hidup. Gerakan dapat berupa gerakan yang besar dan dramatis, gerakan yang halus dan minimal, atau apa pun di antara keduanya. Jenis gerakan yang Anda gunakan harus sesuai dengan situasinya. Gerakan yang diterapkan pada tindakan reguler yang diulang harus kecil dan halus, sehingga tidak memerlukan waktu yang terlalu lama secara berkala. Situasi lain, seperti saat pengguna pertama kali membuka aplikasi, dapat lebih menarik, dan dapat membantu memberi tahu pengguna tentang cara menggunakan aplikasi Anda.
Menambahkan gerakan membuka ke tombol menu
Gerakannya adalah bentuk di depan yang bergerak lurus ke bawah. Kami telah menyediakan pemroses klik untuk Anda yang akan menyelesaikan animasi terjemahan untuk sheet, di NavigationIconClickListener.kt
. Kita dapat menyetel pemroses klik ini di onCreateView()
ProductGridFragement
, di bagian yang bertanggung jawab untuk menyiapkan toolbar. Tambahkan baris berikut untuk menyetel pemroses klik pada ikon menu toolbar:
ProductGridFragment.kt
view.app_bar.setNavigationOnClickListener(NavigationIconClickListener(activity!!, view.product_grid))
Bagian tersebut sekarang akan terlihat seperti berikut:
ProductGridFragment.kt
// Set up the toolbar.
(activity as AppCompatActivity).setSupportActionBar(view.app_bar)
view.app_bar.setNavigationOnClickListener(NavigationIconClickListener(activity!!, view.product_grid))
Build dan jalankan. Tekan tombol menu:
Menekan ikon menu navigasi lagi akan menyembunyikannya.
Menyesuaikan gerakan lapisan depan
Gerakan adalah cara yang bagus untuk mengekspresikan merek Anda. Mari kita lihat seperti apa animasi pengungkapan menggunakan kurva waktu yang berbeda.
Perbarui pemroses klik Anda di ProductGridFragment.kt
untuk meneruskan Interpolator ke pemroses klik ikon navigasi Anda, sebagai berikut:
ProductGridFragment.kt
view.app_bar.setNavigationOnClickListener(NavigationIconClickListener(activity!!, view.product_grid, AccelerateDecelerateInterpolator()))
Hal ini menciptakan efek yang berbeda, bukan?
Ikon bermerek juga mencakup ikon familier. Mari lakukan kustomisasi pada ikon reveal dan gabungkan dengan judul kita untuk mendapatkan tampilan bermerek yang unik.
Mengubah ikon tombol menu
Ubah tombol menu untuk menampilkan ikon yang menyertakan desain berlian. Perbarui Toolbar Anda di shr_product_grid_fragment.xml
untuk menggunakan ikon bermerek baru yang telah kami sediakan untuk Anda (shr_branded_menu
), dan tetapkan atribut app:contentInsetStart
dan android:padding
untuk membuat toolbar lebih sesuai dengan spesifikasi desainer Anda:
shr_product_grid_fragment.xml
<androidx.appcompat.widget.Toolbar android:id="@+id/app_bar" style="@style/Widget.Shrine.Toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:paddingStart="12dp" android:paddingLeft="12dp" android:paddingEnd="12dp" android:paddingRight="12dp" app:contentInsetStart="0dp" app:navigationIcon="@drawable/shr_branded_menu" app:title="@string/shr_app_name" />
Kita akan memperbarui kembali pemroses klik di onCreateView()
dalam ProductGridFragment.kt
untuk mengambil drawable untuk toolbar saat menu terbuka dan saat menu ditutup, sebagai berikut:
ProductGridFragment.kt
// Set up the toolbar. (activity as AppCompatActivity).setSupportActionBar(view.app_bar) view.app_bar.setNavigationOnClickListener(NavigationIconClickListener( activity!!, view.product_grid, AccelerateDecelerateInterpolator(), ContextCompat.getDrawable(context!!, R.drawable.shr_branded_menu), // Menu open icon ContextCompat.getDrawable(context!!, R.drawable.shr_close_menu))) // Menu close icon
Build dan jalankan:
Bagus! Saat latar belakang dapat ditampilkan, ikon menu berlian akan ditampilkan. Saat menu dapat disembunyikan, ikon tutup akan ditampilkan sebagai gantinya.
Dalam empat codelab ini, Anda telah melihat cara menggunakan Komponen Material untuk membuat pengalaman pengguna yang unik dan elegan yang mengekspresikan gaya dan karakteristik merek.
Langkah berikutnya
Codelab ini, MDC-104, melengkapi urutan codelab ini. Anda dapat mempelajari lebih lanjut komponen di MDC-Android dengan mengunjungi Katalog Komponen MDC-Android.
Untuk tantangan lebih lanjut dengan codelab ini, ubah aplikasi Shrine Anda untuk mengubah gambar produk yang ditampilkan saat kategori dipilih dari menu latar belakang.
Untuk mempelajari cara menghubungkan aplikasi ini ke Firebase untuk backend yang berfungsi, lihat Firebase Android Codelab.