BAB I
PENGENALAN ANDROID
Apa itu Android
Android adalah sistem operasi yang dikeluarkan oleh Google khususnya untuk smartphone
dan tablet. Berbagai macam produsen telah menggunakan Android sebagai sistem operasi
untuk device yang mereka produksi. Android juga mempunyai store dimana terdapat 1
miliar pengguna aktif.
Mengapa Android
Muncul pertanyaan kenapa menggunakan Android ? Android memanjakan penggunanya
dengan fiturnya yang sangat canggih seperti tampilan ui yang bagus baik dari segi user
interface dan user experience, dapat digunakan sebagai alat multimedia seperti pemutar
musik dan video, dan juga menggunakan perangkat keras seperti akselerometer,
gyroscope dan sensor lainnya ke dalam aplikasi. Disamping itu ada beberapa hal yang
membuat Android sebagai sistem operasi yang memang layak digunakan oleh pengguna
atau dikembangkan oleh para developer, seperti yang akan dijelaskan berikut ini.
Sistem Operasi SmartphoneTerpopuler
Sejak direlease pada tahun 2008, Android mengeluarkan beberapa versi dan hingga saat ini
yang terbaru adalah Nougat yang di release pada tahun 2016. Pada tahun 2013 Android
menjadi best-selling OS pada tablet dan menjadi os yang majoritas digunakan oleh
pengguna smartphone. Tercatat pada tahun 2016 store Android memiliki lebih dari 2.7 juta
aplikasi dan lebih dari 2 miliar penggunaaktif tiap bulannya.
Android menarik untuk para perusahaan teknologi yang membutuhkan barang siap jadi,
biaya rendah dan kustomisasi os untuk perangkat teknologi tinggi mereka. Dengan
beberapa kelebihan tersebut membuat perusahaan-perusahaan besar mengeluarkan
produknya dengan menggunakan sistemoperasi Android.
Source code dari Android dikeluarkan oleh Google dengan memiliki lisensi open source,
sehingga menarik para komunitas developer dan entusias untuk menggunakannya dalam
project komunitas.
Store
Aplikasi Android bisa di distribusikan dengan menggunakan web, copy apk, email dan
store. Store Android yaitu Google Play merupakan cara termudah bagi para developer
untuk medistribusikan aplikasinya ke pasar yang memiliki jutaan pengguna.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
Google play merupakan store resmi Android yang dikelola oleh Google, pengguna bisa
mencari dan download aplikasi yang di kembangkan dengan menggunakan Android
Software Development Kit. Disamping aplikasi beberapa servis yang ditawarkan di dalam
Google Play adalah media digital, music, buku, majalah, film dan program televisi.
Bagaimana para developer memonetisasi aplikasi yang ada di dalam Google Play? Strategi
monetisasi aplikasi yang di tawarkan Google Play bermacam-macam dimulai dari paid
distribution (app berbayar), in-app produk, subscriptions, dan ads. Tentunya developer
harus mengikuti aturan yang ada untuk memastikan bahwa pengguna mendapatkan user
experience yang paling bagus.
7.1 October 4,
25 ART 0.6% Pixel, Pixel XL
2016
Nougat
7.0 August 22,
24 ART 8.9%
2016 Nexus 5X,
6.0 October 5, Nexus 6P
Marshmallow 23 ART 31.2%
2015
5.1 March 9, 2015 22 ART 22.6% Android One
Lollipop
5.0 November 3,
21 ART 2.1.0 8.2% Nexus 6
2014
4.4 October 31, DVM (and
KitKat 19 18.1% Nexus 5
2013 ART 1.6.0)
4.3 July 24, 2013 18 DVM 1.3% Nexus 7 2013
4.2 November 13, Nexus 4, Nexus
Jelly Bean 17 DVM 4.4%
2012 10
4.1 July 9, 2012 16 DVM 3.1% Nexus 7
4.0 Ice Cream December 16,
15 DVM 0.8% Galaxy Nexus
Sandwich 2011
2.3 February 9,
Gingerbread 10 DVM 1.4.0 0.8% Nexus S
2011
Sources : https://en.wikipedia.org/wiki/Android_(operating_system)
Java
Salah satu Bahasa yang bisa digunakan untuk development Android adalah Java. Selain
Java ada beberapa Bahasa lain yang bisa digunakan seperti C/C++, Go, dan pada May 2017
Google resmi support Kotlin.
Pada akademi ini kita hanya akan fokus menggunakan Java sebagai Bahasa pemrograman
yang digunakan. Oleh karena itu maka kita install dulu software yang harus kita gunakan
untuk coding (menuliskan baris code), siapkan senjata Anda sebelum berperang.
Yang harus diinstall adalah Java Development Kit yang bisa kita dapatkan pada link berikut:
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
Biasanya muncul pertanyaan? Apakah JRE cukup? Tidak, JRE adalah Java Runtime
Environment yang berfungsi sebagai Virtual Machine untuk menjalankan program Java.
Sedangkan JDK merupakan Java SE Development Kit, dimana JRE juga di ada di dalamnya.
Dan yang lebih penting adalah di dalamnya terdapat compiler dan tools untuk membuat
dan compile program.
Sederhananya JRE untuk menjalankan program, JDK untuk membuat program.
Mari kita mulai dengan proses instalasi dari JDK.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
1. Langsung saja buka link di atas menggunakan browser Anda, dan pilih Java Platform (JDK),
tampilan dari layout download dari JDK.
2. Lalu pilihlah yang sesuai dengan device dan os yang Anda pakai.
3. Setelah proses download selesai, langsung install ke device Anda dan ikuti
petunjuknya sampai selesai.
Android Studio
Pada akademi kali ini kita akan menggunakan Android Studio sebagai IDE (Integrated
Development Environment). Android Studio di release 16 May 2013 pada Google IO. Android
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
https://developer.android.com/studio/index.html
1. Dalam dialog ini kita bisa memberi nama dari aplikasi kita, dan company domain.
Company domain akan di gunakan dalam identifikasi unik dari aplikasi kita ketika
sudah di-publish. Kita juga dapat mengganti dari direktori dimana project kita akan
disimpan.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
2. Dialog selanjutnya adalah target devices, di dalam dialog ini kita bisa memilih target
devices dari aplikasi yang akan kita buat. Kita juga bisa mengganti nilai minimum SDK
yang akan di kover oleh aplikasi kita.
3. Dialog selanjutnya adalah default template. Terdapat beberapa template yang bisa
kita gunakan seperti Empty Activity, Login Activity, Navigation Drawer Activity, dan
lain-lain.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
4. Dialog selanjutnya adalah nama dari activity yang pertama kali kita buat.
Android Manifest
Manifest adalah salah satu file yang harus ada di dalam sebuah project Android. Manifest
berfungsi sebagai file yang memberikan informasi penting dari sebuah aplikasi ke sistem
Android. Sistem perlu mengetahui apa yang akan digunakan oleh aplikasi sebelum bisa
mulai dijalankan.
Beberapa fungsi yang ada di dalam manifest adalah sebagai berikut.
Nama Package
1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2. package="com.dicoding.myapplication">
Package name merupakan sebagai identitas unik dari sebuahaplikasi. Identitas ini
juga yang akan digunakan di dalam store untuk membedakan suatu aplikasi dengan
aplikasi lainnya. Jangan pernah mengganti value di dalam package karena nantinya
akan dikenali sebagai aplikasi yang lainjika sudah masuk ke dalam store.
Komponen Aplikasi
Berfungsi untuk mendiskripsikan komponen dari aplikasi mulai dari activity, services,
broadcast receiver, dan content provider.
1. <application
2. android:allowBackup="true"
3. android:icon="@mipmap/ic_launcher"
4. android:label="@string/app_name"
5. android:roundIcon="@mipmap/ic_launcher_round"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
6. android:supportsRtl="true"
7. android:theme="@style/AppTheme">
8. <activity android:name=".MainActivity">
9. <intent-filter>
10. <action android:name="android.intent.action.MAIN" />
11.
12. <category android:name="android.intent.category.LAUNCHER" /
>
13. </intent-filter>
14. </activity>
15.
16. <service
17. android:name=".MyIntentService"
18. android:exported="false" />
19.
20. <receiver
21. android:name=".MyReceiver"
22. android:enabled="true"
23. android:exported="true"></receiver>
24. </application>
Permission
Mendeklarasikan permission apa saja yang harus dimiliki oleh aplikasi untuk akses ke
dalam komponen API seperti internet, external storage, contact, dan juga untuk
berinteraksi kepada aplikasi lainnya.
Gradle
Gradle merupakan open source build automation system. Automation system berguna
untuk mengotomatisasi proses pembuatan dari software build dan proses-proses terkait
lainnya termasuk compile source code menjadi binary code, packaging binary code, dan
menjalankan automated test.
Android Settings
Di dalam block android kita bisa menetapkan compileSDKVersion dan
buildToolsVersion.
Default Config
Di dalamnya terdapat properties seperti applicationID, minSdkVersion,
targetSdkVersion dan test information.
Build Types
Di dalamnya terdapat properties dari debuggable, ProGuard enabling, debug signing,
version name suffix dan test information.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
Dependencies
Di dalamnya terdapat `informasi tentang library yang digunakan oleh aplikasi.
Sync Project
Setiap kali terjadi perubahan informasi di dalam build.gradle maka kita harus melakukan
sinkronisasi terlebih dahulu. Tombol sync now akan muncul pada sebelah kanan atas
ketika terjadi perubahan.
Setelah proses sinkronisasi selesai maka akan muncul informasi pada log apakah proses
sinkronisasi berhasil atau tidak.
Testing aplikasi sudah merupakan kewajiban yang harus dilakukan oleh seorang
developer. Proses running atau debugging bisa dilakukan dengan dua cara yaitu dengan
emulator atau device asli. Baik emulator atau device asli memiliki kelebihan dan
kekurangan masing-masing, kita sebagai developer tinggal memilih mana yang sesuai
dengan keperluan kita.
1. Jalankan icon run, kemudian akan muncul dialog seperti ini. Mari kita coba buat
emulator baru dengan memilih Create New Virtual Device.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
2. Akan muncul dialog dengan pilihan beberapa emulator device yang bisa langsung
anda gunakan.
3. Jika anda ingin membuat spesifikasi hardware sendiri bisa dengan memilih pilihan
New Hardware Profile. Maka akan muncul dialog seperti dibawah ini.
Konfigurasi hardware terserah dengan preferensi dari pengguna, yang perlu diingat
adalah gunakanlah konfigurasi emulator yang sesuai dengan kemampuan dari
laptop atau computer yang Anda gunakan. Run emulator perlu di perhatikan karena
emulator akan memakan resource yang cukup lumayan banyak.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
4. Anda dapat membuat hardware emulator baru atau bisa juga memilih dari
hardware emulator yang sudah ada. Setelah memilih hardware emulator langsung
ke langkah selanjutnya yaitu akan muncul dialog seperti ini.
Pada dialog ini anda akan memilih versi android dari emulator yang akan anda buat.
Pada dialog diatas dipilih versi yang sudah terdownload yaitu Nougat. Tombol
download di sebelah kanan versi menunjukkan bahwa anda perlu men-download-
nya terlebih dahulu jika ingin menggunakannya.
5. Selanjutnya klik Next, dan akan muncul dialog verify configuration. Pada dialog ini
anda bisa sekali lagi memverifikasi configurasi dari emulator yang anda pilih.
Di bawah kiri ada tombol Show Advanced Settings, coba anda klik dan akan muncul
tampilan dialog baru seperti ini.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
Dari tampilan advanced setting anda bisa kustomisasi hardware yang telah kita pilih
sebelumnya.
6. Jika sudah selesai klik finish dan langsung launch emulatornya dengan menekan
tombol hijau yang ada di sebelah kanan.
Catatan :
Jika muncul warning bahwa haxm not installed bisa langsung download dengan
mengikuti link download yang disediakan.
Jika muncul warning bahwa VT-x disabled in BIOS maka anda perlu restart
komputer anda, kemudian masuk ke layar BIOS, dan ubah virtualization-nya
menjadi enabled.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
1. Lebih cepat
2. Fitur seperti geo-location, push notif bisa digunakan
3. Bisa mengetahui daya serap baterai terhadap aplikasi
4. Lebih mudah
Dengan menggunakan device smartphone asli maka kita dapat mengetahui keadaan
(environment) aplikasi ketika dijalankan di device asli. Dengan memastikan bahwa aplikasi
kita berjalan secara wajar di device asli maka sudah cukup memberikan jaminan kepada
aplikasi kita ketika nantinya di pasarkan (store). Akan tetapi kadang kala dengan hanya run
di satu device belum cukup untuk merepresentasikan berjalannya aplikasi kita di store,
dikarenakan banyaknya model device Android yang ada di pasaran saat ini. Tapi kita tidak
akan membahas masalah ini di dalam akademi kita. Mari ikuti langkah-langkah berikut
untuk run atau debug di dalam device. Tampilan dari langkah berikut bisa dipastikan akan
berbeda dengan device yang Anda pakai, akan tetapi secara garis besar langkahnya akan
sama meskipun berbeda device
1. Pastikan device yang akan dipakai sesuai dengan target SDK atau paling tidak min
SDK version dari aplikasi kita.
2. Buka setting dan masuk ke dalam menu About. Di dalam about cari informasi
tentang build number.
4. Kembali ke menu setting di awal dan akan muncul menu baru di bawah about yaitu
Developer Options. Selamat anda sudah resmi menjadi seorang Developer Android.
5. Masuk ke dalam menu Developer options dan pastikan opsi USB Debugging Mode
sudah nyala.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
6. Oke selesai setting pada device langsung saja koneksikan dengan laptop atau
computer yang anda pakai.
Hal terakhir setelah mengembangkan aplikasi di Android adalah membuat file executable
dalam bentuk format APK (Android Application Package) yang dapat didistribusikan agar
aplikasi kita dapat sampai ke tangan pengguna. Jika kamu belum mengerti tentang apk, ini
seperti file exe di windows atau ipa di iOS yang akan didapatkan oleh pengguna untuk
melakukan instalasi (pemasangan) aplikasi di device android. File inilah yang akan
nantinya kamu upload ke Google Play agar pengguna bisa mendownload aplikasi kamu.
Kelebihan dari file apk ini adalah kemampuannya untuk didistribusikan melalui non market
aplikasi, bisa melalui website, email, bahkan flashdisk. Namun, jika aplikasi mu ingin lebih
menjangkau lebih jauh pengguna disarankan tetap melakukan publish aplikasi kamu ke
Google Play Store.
Cara membuat file apk di android pun cukup mudah via wizard atau via command line.
Pada sesi kali ini kita akan memfokuskan pada penggunaan wizard untuk melakukan
proses generate apk yang akan kita bagi menjadi dua :
Sebelum memulai kami yakin kamu masih mempertanyakan tentang ‘mahluk’ bernama
keystore itu seperti apa, baik, keystore adalah sebuah file binary yang berisi informasi
tentang satu atau lebih private key. Ini lebih mengarah pada konsep pengamanan apk yang
kita buat yang di generate dengan sertifikat berbasis public dan private key. Konsep
umumnya sebagai berikut : Sistem operasi android membutuhkan semua apk di signed /
digenerate dengan menggunakan sebuah sertifikat sebelum aplikasi atau apk-apk tersebut
dipasang ke dalam device. Proses penggunaan public dan private key berlangsung selama
developer melakukan generasi (signed) apk untuk versi debug maupun untuk versi
production (release). Sebuah sertifikat digital public key atau juga disebut identify
certificate berisi informasi tentang dirinya sendiri dan private key yang bisa digunakan dan
juga termasuk metadata dari pemilik certificate tersebut dalam hal ini developer yang
melakukan proses pembuatan aplikasi. Public key ini secara otomatis akan dilampirkan
dalam file apk ketika proses signed/generate apk dilakukan oleh gradle melalui signing
tools yang disediakan oleh android studio. Public key bersifat identifier unik yang hanya
berasosiasi dengan file project android yang digunakan dan file keystore terkait. Selain
untuk menjaga keamanan dari apk yang dibuat ini juga akan termasuk pada konsistensi
dan menjaga originalitas ketika apk diupdate di Google Play Store. Ingat apk hanya bisa
diupdate jika keystore pertama kali upload sama dengan keystore ke n kali upload.
Kegunaan keystore sangat banyak dua diantaranya yang paling terpenting ialah :
Untuk integrasi ke layanan Google seperti Google Maps dengan menggunakan nilai
hash (diggest SHA1) didalamnya.
Untuk integrasi ke layanan api facebook dengan menggunakan keyhash base64
yang terkandung didalam keystore.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
Keystore merupakan sebuah file penting yang kamu harus benar-benar bisa menjaga,
terlebih jika aplikasi buatan kamu adalah calon-calon aplikasi dengan jumlah download
yang besar dan memberikan manfaat banyak. Karna kalau kamu lalai akibatnya adalah file
apk kamu tidak dapat terupdate dan hal terburuknya kamu harus melakukan dari awal lagi.
Berikut adalah tips yang bisa kamu pahami untuk mengamankan keystore :
1. Plih password yang sulit ditebak, kombinasikan angka, alphabet dan simbol dalam
membuatnya.
2. Bedakan antara keystore password dan keypassword ketika membuat file apk
dengan kustom keystore.
3. Jangan memberikan keystore kepada orang yang tidak dipercaya apalagi kamu
meletakannya didalam file project aplikasi.
App Signing
Jika kamu ingin menemukan dimana default keystore kamu yang berupa debug.keystore
kamu bisa mendapatkannya di ~/.android/debug.keystore Pada mac dan
C:\User\YourUser\.android\debug.keystore pada windows.
Tenang pada latihan kali ini kita sama sekali tidak melakukan pengkodean. Mari kita mulai
dengan yang pertama :
1. Buka salah satu project android associate favoritmu, misal My Broadcast Receiver.
2. Sekarang klik menu Build → Build APK
3. Lalu perhatikan secara otomatis pada status bar gradle akan menjalankan sebuah
proses untuk melakukan proses generate apk. Proses ini bergantung pada seberapa
kompleks aplikasi kamu dan seberapa banyak dependensi dengan library yang
kamu gunakan.
4. Ketika berhasil maka di sudut kanan atas android studio kamu akan muncul
notifikasi sebagai berikut :
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
Sekarang tinggal kamu klik link yangterdapat pada notifikasi tersebut dan secara
otomatis akan diarahkan dimana file apk tersebut berada biasanya pada struktur
seperti berikut project-name/module-name/build/outputs/apk/dan jika
disesuaikan dengan project yang sedang digunakan maka akan menjadi
sepertiberikut MyBroadcastReceiver/app/build/outputs/apk/apk-debug.apk
5. Tadaaaa… sekarang kamu sudah berhasil membuat apk dengan menggunakan
default keystore. Ingat, apk yang baru saja kamu generate akan ditolak oleh Google
Play Store jika kamu mencoba mengupload dan publish ke Google Play Store. Agar
dapat diterima oleh Google Play Store kamu harus melakukan signed atau generate
dengan menggunakan kustom keystore.
6. Sekarang coba kamu pindahkan file apk yang barusan kamu buat ke dalam device
kamu (tentunya dengan yang sebelumnya kamu copot (uninstall) terlebih dahulu)
dan dengan file explorer pada device kamu, temukan dan lakukan instalasi aplikasi
seperti biasa dan whoillaaa aplikasi android kamu bisa terinstal di device! File ini
bisa kamu berikan ke kakak, nenek, mbah atau opung kamu untuk memamerkan
kalau kamu sudah bisa bikin aplikasi di Android yeahh.
7. Mudah bukan ? Sekarang kita lanjut membuat apk dengan kustom keystore.
8. Langkah pertama klik Build → Generate Signed APK
10. Selanjutnya, pilih create new… pada form yang tampil lengkapi isian didalamnya
menjadi sebagai berikut (ingat ini hanya contoh)
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
13. Jika ditanyakan tentang password seperti ini, masukan password yang kamu
gunakan untuk device laptop mu.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB 1 Pengenalan Android
14. Selanjutnya tentukan dimana kamu menyimpan apk yang dihasilkan. Disini kami
membiarkan secara default. Klik finish untuk memulai signed/generate apk.
15. Perhatikan pada gradle proses di status bar bagian bawah untuk melihat progress
signed/generate apk
17. Selamat apk production kamu berhasil digenerate. Ingat, ini dilakukan ketika kamu
ingin melakukan upload/reupload plus publish aplikasi kamu di Google Play dan
jangan lupa setiap kamu melakukan update aplikasi jangan lupa untuk merubah
nilai dari
1. versionCode 1 (Incremental)
2. versionName "1.0"
Sebelum melakukan upload update aplikasi. Kalau tidak dirubah siap-siap apk baru
yang akan kamu upload akan ditolak oleh Google Play Store.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
BAB 2
ACTIVITY
Teori
Untuk lebih mendalami tentang Activity, kami menyarankan anda untuk membaca
referensi berikut :
Activities (https://developer.android.com/guide/components/activities/)
Activity Lifecycle
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
Gambar 1: Jika anda memiliki sebuah aplikasi yang terdiri dari 2 Activity. Activity pertama
dijalankan setelah pengguna meluncurkan aplikasi anda melalui icon aplikasi di layar
device. Activity yang ada saat ini berada pada posisi Activity running setelah melalui
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
LifeCycle
Proses penghancuran aplikasi bukan hanya pada saat ketika sistem menghancurkan
activity karena membutuhkan memori untuk proses lain; akan tetapi terjadi juga ketika
terjadi perubahan konfigurasi seperti orientation changes, keyboard avalaibility,
dan language.
Beberapa proses tersebut ketika terjadi akan menjalankan onDestroy kemudian langsung
memanggil onCreate. Behavior tersebut dimaksudkan agar activity dapat menyesuaikan
dengan konfigurasi yang baru seperti menyesuaikan ukuran layar.
Hal yang perlu diingat ketika menggunakan onSaveInstanceState adalah Bundle tidak
diperuntukkan menyimpan data yang besar seperti bitmaps dan Bundle harus melalui
proses serialize serta deserialize yang akan memakan memori.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
PRAKTEK
Logika Dasar
1. Buat Project Baru dengan klik File -> New -> New Project... pada Android Studio anda
2. Setelah muncul Jendela Create New Project, kemudian atur nama aplikasi dan domain
perusahaan/website anda. Sebaiknya jangan sama dengan apa yang ada dicontoh. Dan
jangan lupa pula untuk menentukan lokasi project.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
3. Kemudian pilih tipe device untuk aplikasi beserta target minimum SDK yang akan kita
gunakan. Pilihan target Android SDK yang kita pilih akan mempengaruhi banyaknya device
yang bisa menggunakan aplikasi buatan kita. Disini kita pilih untuk tipe device Phone and
Tablet dengan minimum SDK diset ke Level 15 (Ice Cream Sandwich)/ Klik Next untuk
melanjutkan.
4. Pada bagian ini kita akan memilih tipe Activity awal dari template yang telah
disediakan. Saat ini Android Studio sudah menyediakan berbagai macam template Activity
dari yang paling sederhana hingga yang paling kompleks seperti :
Google AdMob Ads Activity : Activity dengan default konfigurasi iklan Admob
Google Maps Activity : Activity dengan menyediakan konfigurasi dasar Google Maps
Master / Detail Flow : Activity yang diperuntukan untuk alur aplikasi Master Detail pada
device tablet
Scrolling Activity : Activity dengan kemampuan Scroll konten didalamnya secara vertical
Tabbed Activity : Activity yang diperuntukan untuk menampilkan lebih dari satu tampilan,
dapat digeser ke kanan dan ke kiri (Swipe) dan dengan menggunakan komponen ViewPager
Saat ini kita pilih tipe Empty Activity, klik Next untuk melanjutkan.
5. Selanjutnya, tentukan nama Activity pertama kita, saat ini kita biarkan pada kondisi apa
adanya. Ingat, jika suatu saat nanti kita ingin melakukan penambahan Activity, best
practice nya adalah dengan menambahkan Activity setelah kata nama kelas yang akan kita
buat. Misal: ProfileActivity, SettingsActivity dan lain sebagainya. Klik Finish untuk
menyelesaikan.
6. Selamat!, Anda telah berhasil membuat sebuah project baru Android. Layar anda pasti akan
seperti dibawah ini:
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
7. Di sebelah kanan anda adalah workspace dimana Activity anda berada dan
bernama MainActivity.java dengan layoutnya activity_main.xml. Di sebelah kiri anda
terdapat struktur project anda dimana nanti kita akan banyak menambahkan berbagai
komponen, asset dan library. Untuk lebih mengenal Android Studio lebih dalam silakan
baca materi ini https://developer.android.com/studio/intro/index.html
Selanjutnya kita akan mulai melakukan pengkodean aplikasi atau lebih enaknya
disebut ngoding. Berikut flow umumnya.
Ngoding Layout untuk User Interface aplikasi
Ngoding Activity untuk menambahkan logika aplikasi
Jangan ngetik saja atau ngoding polos, Gunakan ctrl + space untuk menggunakan code
completion dari Android Studio agar mengoptimasi import package dari komponen yang
digunakan.
Dilarang Keras untuk copy - paste! Ngoding pelan-pelan akan membuat anda lebih jago di
masa depan.
Selamat ngoding!
1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
3. android:layout_width="match_parent"
4. android:layout_height="match_parent"
5. android:paddingBottom="@dimen/activity_vertical_margin"
6. android:paddingLeft="@dimen/activity_horizontal_margin"
7. android:paddingRight="@dimen/activity_horizontal_margin"
8. android:paddingTop="@dimen/activity_vertical_margin"
9. android:orientation="vertical"
10. tools:context="com.dicoding.associate.barvolume.MainActivity">
11. <TextView
12. android:layout_width="match_parent"
13. android:layout_height="wrap_content"
14. android:text="Panjang"
15. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
16. <EditText
17. android:id="@+id/edt_length"
18. android:layout_width="match_parent"
19. android:layout_height="wrap_content"
20. android:inputType="numberDecimal"
21. android:lines="1"
22. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
23. <TextView
24. android:layout_width="match_parent"
25. android:layout_height="wrap_content"
26. android:text="Lebar"
27. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
28. <EditText
29. android:id="@+id/edt_width"
30. android:layout_width="match_parent"
31. android:layout_height="wrap_content"
32. android:inputType="numberDecimal"
33. android:lines="1"
34. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
35. <TextView
36. android:layout_width="match_parent"
37. android:layout_height="wrap_content"
38. android:text="Tinggi"
39. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
40. <EditText
41. android:id="@+id/edt_height"
42. android:layout_width="match_parent"
43. android:layout_height="wrap_content"
44. android:inputType="numberDecimal"
45. android:lines="1"
46. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
47. <Button
48. android:id="@+id/btn_calculate"
49. android:layout_width="match_parent"
50. android:layout_height="wrap_content"
51. android:text="Hitung"
52. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
53. <TextView
54. android:id="@+id/tv_result"
55. android:layout_width="match_parent"
56. android:layout_height="wrap_content"
57. android:text="Hasil"
58. android:gravity="center"
59. android:textSize="24sp"
60. android:textStyle="bold"
61. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
62. </LinearLayout>
2. Akan muncul warning pada attribut android:text pada layout tersebut. Ini disebabkan
karena kita hardcode code string kita. Mari kita hilangkan code warning tersebut dengan
menekan alt+enter pada attribut android:text. Akan muncul dialog seperti ini, pilihlah
extract string resource.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
3. Kemudian akan muncul dialog seperti dibawah ini, sesuaikan dengan nama yang
ada.
4. Fungsi extract string resource akan secara otomatis menambahkan values dalam
android:text ke dalam file res → values → strings.xml. Tambahkan juga pada view
lainnya hingga tidak ada warning lagi. Jika kita buka files strings.xml akan seperti
ini.
1. <resources>
2. <string name="app_name">BarVolume</string>
3. <string name="lebar">Lebar</string>
4. <string name="tinggi">Tinggi</string>
5. <string name="hitung">Hitung</string>
6. <string name="hasil">Hasil</string>
7. <string name="panjang">panjang</string>
8. </resources>
5. Jika terjadi error pada attribut dimens, maka kita perlu menambahkan file
dimens.xml di dalam res → values → dimens.xml. Error ini disebabkan karena pada
Android Studio 2.3 file dimens.xml sudah tidak di generate secara otomatis ketika
sebuah project dibuat. Langsung saja tambahkan dengan cara klik kanan pada
directory res. Akan muncul dialog seperti ini.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
7. Jika file dimens.xml sudah terbuat, sesuaikan isi dari dimens.xml menjadi seperti
berikut.
1. <resources>
2. <!-- Default screen margins, per the Android Design guidelines. -->
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
3. <dimen name="activity_horizontal_margin">16dp</dimen>
4. <dimen name="activity_vertical_margin">16dp</dimen>
5. </resources>
Jangan khawatir, silakan klik keatas baris merah tersebut dan silakan klik pada
icon atau dengan tekan tombol (Alt + Enter)lalu pilih implements method
2. Setelah sudah selesai silakan jalankan aplikasi dengan mengklik atau Run → Run ‘app’ dari
menu bar. Kemudian ada pilihan seperti ini.
Itu tandanya adb (Android Debugger) device yang anda punya telah terkoneksi dengan Android
Studio. Jika anda tidak memiliki device silakan gunakan emulator. Ikuti materinya
disini https://developer.android.com/studio/run/managing-avds.html.
3. Selesai? Belum, masih ada yang kurang , ketika setelah menghitung luas dan kemudian
terjadi pergantian orientasi pada device maka hasil perhitungan akan hilang. Tambahkan
beberapa baris berikut pada MainActivity.java
1. private static final String STATE_HASIL = "state_hasil";
2.
3. @Override
4. protected void onSaveInstanceState(Bundle outState) {
5.
6. outState.putString(STATE_HASIL, tvResult.getText().toString());
7. super.onSaveInstanceState(outState);
8. }
Kemudian tambahkan juga beberapa baris berikut pada baris terakhir method onCreate
9. if (savedInstanceState != null){
10. String hasil = savedInstanceState.getString(STATE_HASIL);
11. tvResult.setText(hasil);
12. }
4. Silakan jalankan aplikasi kembali kemudian coba lakukan perhitungan dan ganti orientasi
device. Jika sudah benar maka hasil perhitungan akan dijaga.
Bedah Kode
1. xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
1. tools:context="com.dicoding.associate.barvolume.MainActivity"
1. <TextView
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content"
4. android:text="Panjang"
5. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
Komponen diatas adalah sebuah TextView, warna ungu menandakan namespace yang
digunakan, warna biru adalah atribut dari komponen dan warna hijau adalah nilai dari
atribut. Penjelasannya seperti dibawah ini:
match_parent: Ini berarti bahwa ukuran dimensi sebuah View disesuaikan dengan ukuran
layar secara horizontal jika pada layout_width dan vertikal jika pada layout_height.
wrap_content : Ini berarti bahwa ukuran dimensi sebuah View disesuaikan dengan ukuran
konten didalamnya baik secara horizontal pada layout_width dan vertikal jika
pada layout_height.
@dimen/activity_vertical_margin: Value activity_vertical_margin berasal dari file
resource dimens.xml yang bisa anda lihat dengan cara menekan dan tahan
tombol ctrl (atau command) + arahkan kursor keatasnya dan kemudian klik sekali.
Penggunaan centralize resource value akan memudahkan anda sewaktu developmen
aplikasi Android. Penggunaan cara tersebut supaya tidak menulis value yang sama
berulang-ulang.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
1. <Button
2. android:id="@+id/btn_calculate"
3. android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:text="Hitung"
6. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
1. android:id="@+id/btn_calculate"
Jika kita memberikan id pada sebuah View maka kita telah memberikan identifier untuk
View tersebut agar:
Bisa kita manipulasi/dikontrol pada level logic di komponen
seperti Activity atau Fragment. ID ini akan diciptakan di file R.javakedalam bentuk nilai
hexa bertipe data Integer à public static final int btn_calculate=0x7f0b0057;
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
Sebagai acuan untuk penyusunan tampilan pada RelativeLayout (akan dibahas pada
modul selanjutnya).
Pembahasan tentang Logika Kode
Menandakan bahwa Kelas Java kita merupakan sebuah Activity karna inherit ke superclass
bernama AppCompatActivity
1. implements View.OnClickListener
Ini adalah listener yang kita implementasikan untuk melakukan proses event klik pada
komponen tombol (button)
Jika terdapat baris merah seperti ini :
Jangan khawatir, silakan klik ke atas baris merah tersebut dan silakan klik pada icon atau
dengan tekan tombol (Alt + Enter) lalu pilih implements method
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
Deklarasi semua komponen View yang akan dimanipulasi. Kita deklarasikan secara global
agar bisa dikenal di keseluruhan bagian kelas.
1. @Override
2. protected void onCreate(Bundle savedInstanceState) {
3. super.onCreate(savedInstanceState);
4. setContentView(R.layout.activity_main);
5. edtWidth = (EditText)findViewById(R.id.edt_width);
6. edtHeight = (EditText)findViewById(R.id.edt_height);
7. edtLength = (EditText)findViewById(R.id.edt_length);
8. btnCalculate = (Button)findViewById(R.id.btn_calculate);
9. tvResult = (TextView)findViewById(R.id.tv_result);
10. btnCalculate.setOnClickListener(this);
11. }
Method onCreate() merupakan method utama pada Activity. Di sinilah kita dapat mengatur
layout xml dan semua proses inisialisasi komponen yang akan digunakan diciptakan. Pada
method ini kita casting semua komponen View yang kita telah deklarasikan sebelumnya,
agar dapat kita manipulasi.
1. setContentView(R.layout.activity_main);
Maksud baris diatas adalah bahwa kelas MainActivity akan menampilkan tampilan yang
berasal dari layout activity_main.xml
1. edtWidth = (EditText)findViewById(R.id.edt_width);
Maksud dari baris diatas adalah obyek EditText edtWidth disesuaikan (Cast) dengan
komponen EditText ber-ID edt_width di layout xml melalui method findViewById()
1. btnCalculate.setOnClickListener(this);
Set Event Click Listener untuk obyek btnCalculate sehingga dapat melakukan sebuah aksi
ketika pengguna melakukan Klik. Keyword this menekankan pada obyek Activity saat ini
yang telah mengimplementasikan listener OnClickListener sebelumnya.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB II ACTIVITY
Pembahasan saveInstanceState
1. @Override
2. protected void onSaveInstanceState(Bundle outState) {
3.
4. outState.putString(STATE_HASIL, tvResult.getText().toString());
5. super.onSaveInstanceState(outState);
6. }
Perhatikan pada method onSaveInstanceState, didalam method ini hasil perhitungan yang
ditampilkan pada tvResult dimasukkan pada bundle kemudian di save isinya. Setelah
onSaveInstanceState berhasil dijalankan maka activity akan melakukan proses onDestroy
dan menjalankan lagi OnCreate secara otomatis.
1. if (savedInstanceState != null){
2. String hasil = savedInstanceState.getString(STATE_HASIL);
3. tvResult.setText(hasil);
4. }
Pada onCreate inilah kita menggunakan nilai bundle yang telah kita simpan tadi
pada onSaveInstanceState kemudian kita isikan kembali pada tvResult.
Selamat! Anda telah berhasil membuat dan menjalankan aplikasi android pertama di
device atau emulator. Silakan lanjut ke CodeLab berikutnya.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
BAB III
INTENT
Teori
Intent adalah mekanisme untuk melakukan sebuah action dan komunikasi antar
komponen aplikasi misal Activity, Services, dan Broadcast Receiver. Ada tiga penggunaan
umum Intent dalam aplikasi Android yaitu:
Memindahkan satu Activity ke Activity lain dengan atau tidak membawa data.
Menjalankan background Service misal melakukan sinkronisasi ke server dan
menjalankan proses berulang (periodic/scheduler task).
Mengirimkan obyek broadcast ke app yang membutuhkan. Misal jika aplikasi
membutuhkan proses menjalankan sebuah background service setiap aplikasi
selesai melakukan booting. Aplikasi harus bisa menerima obyek Broadcast yang
dikirimkan oleh sistem Android untuk event booting tersebut.
Explicit Intent adalah tipe intent yang digunakan untuk menjalankan komponen
dari dalam sebuah aplikasi. Explicit intent bekerja dengan menggunakan nama
kelas yang dituju misal : com.dicoding.activity.DetailActivity. Umumnya intent ini
digunakan untuk mengaktifkan komponen pada satu aplikasi.
Implicit Intent adalah tipe intent yang tidak memerlukan detail nama kelas yang
ingin diaktifkan, ini memungkinkan komponen dari aplikasi lain bisa merespon
request intent yang dijalankan. Penggunaan tipe Intent ini umumnya diperuntukan
untuk menjalankan fitur/fungsi dari komponen aplikasi lain. Contohnya ketika kita
membutuhkan aplikasi kita untuk mengambil foto, daripada kita harus membuat
sendiri fungsi kamera lebih baik kita menyerahkan proses tersebut pada aplikasi
kamera bawaan dari device atau aplikasi kamera lain yang telah terinstal
sebelumnya di device atau juga jika kita membutuhkan untuk fungsi berbagi
konten, kita bisa memanfaatkan intent untuk menampilkan mana saja aplikasi yang
bisa menawarkan fungsi berbagi (share) konten. Implementasi Intent Implicit ini
akan sangat memudahkan bagi pengembang agar tetap fokus pada proses bisnis
inti dari aplikasi yang dikembangkan.
PRAKTEK
Codelab ini menitik beratkan pada implementasi Intent untuk melakukan perpindahan
dari Activity ke Activity dengan atau tidak membawa data. Beberapa bagian dari code lab
ini akan menjawab beberapa pertanyaan umum dalam pengembangan aplikasi Android
sebagai berikut:
Logika Dasar
Berpindah dari satu Activity ke Activity lain dengan membawa data. Activity asal
akan mengirimkan data melalui Intent dan Activity tujuan akan menerima data yang
dikirimkan.
Jangan lupa untuk menambahkan file dimens.xml secara manual di dalam res →
values. Dan isikan file dimens.xml seperti berikut
19. <resources>
20. <!-- Default screen margins, per the Android Design guidelines. -->
21. <dimen name="activity_horizontal_margin">16dp</dimen>
22. <dimen name="activity_vertical_margin">16dp</dimen>
23. </resources>
18. }
Selesai! Langkah pertama untuk memindahkan satu Activity ke Activity lain sudah selesai,
sekarang silakan jalankan aplikasi anda dengan mengklik tombol pada menu bar.
Seharusnya sekarang anda sudah bisa memindahkan Activity dengan mengklik tombol
‘Pindah Activity’.
Bedah Kode
Kita telah belajar bagaimana membuat sebuah Activity baru, di materi sebelumnya syarat
sebuah Activity harus terdaftar pada file AndroidManifest.xml dan semenjak menggunakan
Android Studio proses pendaftaran Activity ke file AndroidManifest.xml dilakukan secara
otomatis tidak manual seperti di era eclipse.
1. <intent-filter>
2. <action android:name="android.intent.action.MAIN" />
3. <category android:name="android.intent.category.LAUNCHER" />
4. </intent-filter>
Baris diatas bermakna bahwa MainActivity memiliki Intent Action utama dari keseluruhan
Activity yang ada di sebuah Aplikasi. Sedangkan
Kita membuat sebuah obyek Intent dengan cara seperti diatas dengan memberikan
Kelas Activity Asal (MainActivity.this) dan Kelas Activity tujuan (MoveActivity.class)
pada kontruktor kelas Intent (constructor).
Kelas asal selalu ditekankan dengan .this yang menandakan obyek kelas saat ini dan kelas
tujuan selalu ditekankan .class.
Jika kita membiarkan code assistant dari Android Studio, maka akan tampil rekomendasi
(code hint) sebagai berikut:
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
Pada konteks diatas kita memilih Context packageContext, Class<?> cls sebagai inputan
untuk nilai kontruktor Intent.
startActivity(moveIntent); => method disamping akan menjalankan Activity baru tanpa
membawa data berdasarkan obyek Intent yang diinputkan pada case ini adalah obyek
moveIntent yang akan menjalankan MoveActivity.
Setelah kita telah berhasil memindahkan satu Activity ke Activity lain dengan tidak
membawa data. Nah, pada bagian selanjutnya kita akan membuat sebuah Intent yang
didalamnya akan membawa data ke Activity tujuan.
Selanjutnya adalah kita akan membuat sebuah Intent yang didalamnya akan membawa
data ke Activity tujuan. Siap?
1. Ayo buka activity_main.xml lagi dan tambahkan satu tombol lagi dibawah tombol
sebelumnya sehingga kode activity_main.xml kita menjadi seperti ini.
Tambahkan kembali dimens.xml secara manual di dalam res → values. Dan isikan
filenya menjadi seperti berikut.
25. <resources>
26. <!-- Default screen margins, per the Android Design guidelines. -->
27. <dimen name="activity_horizontal_margin">16dp</dimen>
28. <dimen name="activity_vertical_margin">16dp</dimen>
29. </resources>
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
3. Selanjutnya, buat Activity baru lagi seperti cara sebelumnya dan namakan Activity-
nya dengan MoveWithDataActivity. Lalu, pada activity_move_with_data.xml kita
tambahkan sebuah TextView ber-ID untuk menampilkan data yang dikirimkan dari
Activity asal.
13. tvDataReceived.setText(text);
14. }
15. }
6. Sekarang, silakan jalankan aplikasi andalagi dan coba klik pada tombol ‘Pindah
Activity dengan Data’ dan Selamat! Seharusnya andasudah bisa memindahkan satu
Activity ke Activity lain dengan membawa data.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
Bedah Kode
Pada bagian sebelumnya anda sudah mempelajari bagaimana memindahkan satu Activity
ke Activity lain dengan membawa data. Dan itu sangat penting karena ketika kita
mengembangkan sebuah aplikasi Android yang kompleks maka akan banyak sekali Activity
yang terlibat dan perpindahan Activity dengan data akan menjadi sangat krusial dalam
memaksimalkan konten yang ada dengan experience yang diberikan oleh aplikasi kepada
pengguna.
Perbedaan mendasar antara memindahkan Activity dengan membawa data dan tidak
adalah dengan menempatkan data yang akan dikirim ke Activity tujuan pada baris ini.
Kita memanfaatkan method putExtra() untuk mengirimkan data bersamaan dengan obyek
Intent. Sedangkan method putExtra() itu sendiri merupakan method yang menampung
pasangan Key-Value dan memiliki beberapa pilihan tipe input seperti berikut :
Hampir semua tipe data untuk input value disupport oleh method putExtra().
1. moveWithDataIntent.putExtra(MoveWithDataActivity.EXTRA_NAME,"DicodingAcademy Boy");
Disini kita akan mengirimkan data bertipe String ke MoveWithDataActivity dan kemudian
pada MoveWithDataActivity akan dilakukan proses pengambilan nilai data berdasarkan
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
Catatan : Key yang dikirimkan via putExtra() harus sama dengan Key sewaktu mengambil
nilai dari data yang dikirimkan melalui getStringExtra()
Dalam konteks diatas key yang dikirimkan dan key sewaktu mengambil nilai data adalah
sama yaitu EXTRA_NAME (yang bernilai “extra_name”) dan nilai dari data yang dikirimkan
via Intent disimpan kedalam variable name bertipe data String.
Begitu juga dengan,
1. <Button
2. android:id="@+id/btn_dial_number"
3. android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:text="Dial a Number"
6. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
17. tools:context="com.dicoding.associate.myintentapp.MainActivity">
18. <Button
19. android:id="@+id/btn_move_activity"
20. android:layout_width="match_parent"
21. android:layout_height="wrap_content"
22. android:text="Pindah Activity"
23. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
24. <Button
25. android:id="@+id/btn_move_activity_data"
26. android:layout_width="match_parent"
27. android:layout_height="wrap_content"
28. android:text="Pindah Activity dengan Data"
29. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
30. <Button
31. android:id="@+id/btn_dial_number"
32. android:layout_width="match_parent"
33. android:layout_height="wrap_content"
34. android:text="Dial a Number"
35. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
36. </LinearLayout>
Setelah selesai, silakan jalankan lagi aplikasi anda dan yeay, anda sudah bisa men-dial
sebuah nomor telepon melalui aplikasi telepon bawaan dari Android/Device anda.
Selamat!
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
Bedah Kode
Baru saja kita mengimplementasikan penggunaan Intent secara implicit untuk melakukan
proses dial sebuah no telepon. new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:"+phoneNumber)); kita menggunakan inputan new Intent(ACTION,
Uri); pada konstruktor sewaktu menciptakan obyek Intent dimana :
Action : Intent.ACTION_DIAL
Uri : Uri.parse("tel:"+phoneNumber)
Variabel ACTION_DIAL menentukan intent filter dari aplikasi-aplikasi yang bisa
menghandle Action tersebut. Disini aplikasi yang memiliki kemampuan untuk komunikasi
akan tampil pada opsi pilihan yang tampil ke pengguna. Selain ACTION_DIAL, di Android
sudah tersedia berbagai Action yang tinggal didefinisikan sewaktu menciptakan obyek
Intent untuk mengakomodir berbagai tujuan.
Silakan cek link berikut untuk detailnya :
Intent
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB III INTENT
Buat yang belum tau apa itu Uri, berikut penjelasan singkatnya :
Uri adalah sebuah untaian karakter yang digunakan untuk mengidentifikasi nama, sumber,
atau layanan di Internet sesuai dengan RFC 2396. Pada Uri.parse("tel:"+phoneNumber) kita
melakukan parsing Uri dari bentuk teks String menjadi sebuah obyek Uri dengan
menggunakan method static parse(String). Secara struktur dibagi menjadi :
Dimana “tel” adalah sebuah skema yang disepakati untuk sumber daya telepon dan
phoneNumber adalah variabel String yang bernilai “081210841382”. Skema lain dari Uri
seperti “geo” untuk peta, “http” untuk browser sisanya bisa dilihat di halaman ini :
Common Intents
Pada prosesnya, pemanggilan Intent secara implicit akan berjalan sesuai dengan diagram
dibawah ini.
Pengguna memilih salah satu opsi aplikasi dan kemudian sistem Android akan me-
routing ke Activity pada aplikasi yang dipilih yang memiliki Intent-Filter untuk aksi
ACTION_DIAL
3. Aplikasi yang dipilih pun muncul di layar dengan no telepon yang sudah diset.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
BAB IV
Views dan Views Group
Pada modul sebelumnya anda telah belajar bagaimana mengenal dan memahami
komponen fundamental aplikasi di Android berikut dengan penggunaan beberapa
komponen pembentuk tampilan aplikasi seperti Button dan TextView agar pengguna
dapat memberikan input dan berinteraksi dengan aplikasi.
Pada bagian ini anda akan mempelajari lebih dalam tentang konsep dasar pembentukan
tampilan antar muka pengguna seperti pemanfaatan komponen-komponen
berbasis View dan ViewGroup yang berkolaborasi sehingga membentuk sebuah tampilan
antar muka pengguna. Contohnya seperti ini,
Salah satu contoh dari tampilan dalam file layout xml untuk merepresentasikan
kolaborasi View dan ViewGroup seperti ini :
android:orientation=”vertical” android:orientation=”horizontal”
Cek link ini tentang linearlayout :
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
Linear Layout
RelativeLayout
Layout yang paling fleksible dikarenakan posisi dari masing-masing komponen di
dalamnya dapat mengacu secara relatif pada komponen yang lainnya dan juga dapat
mengacu secara relatif ke batas layar.
Relative Layout
FrameLayout
Layout ini adalah layout yang paling sederhana. Layout ini akan membuat komponen yang
ada di dalamnya menjadi menumpuk atau saling menutupi satu dengan yang lainnya.
Komponen yang paling pertama pada layout ini akan menjadi bagian bawah dari
komponen-komponen di atasnya. Pada materi penggunaan fragment di materi
sebelumnya, FrameLayout memiliki kemampuan untuk menjadi kontainer buat fragment-
fragment di dalam sebuah Activity. Berikut ilustrasi dari
penggunaan FrameLayoutterhadap child view yang dimiliki di dalamnya.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
Frame Layout
TableLayout
Susunan komponen di dalam TableLayout akan berada dalam baris dan kolom. Namun
jangan berharap layout jenis ini akan menampilkan garis pembatas untuk baris, kolom atau
cell-nya menggunakan konsep yang sama pada pengembangan aplikasi berbasis web.
Cek link ini tentang TableLayout :
Grid Layout
Jika anda sadari sebetulnya perbedaan dari masing-masing layout yang dijelaskan di atas
terletak pada susunan komponen view di dalamnya. Itu saja.
Lalu pertanyaannya kapan kita
menggunakan LinearLayout, RelativeLayout, FrameLayout dan TableLayout ?
Jawabannya adalah relatif tergantung pada kebutuhan dan performa.
Salah satu tips performa dari aplikasi android adalah dengan membuat susunan hierarki
layout dalam sebuah file layout xml secara sederhana dan flat dalam artian kedalaman
penggunaan nested layout atau layout bersarang tidak terlalu dalam. Selain itu,
pemahaman yang baik terhadap dasar-dasar pembangunan UI di android, pengalaman,
feeling, dan selalu mencari tahu best-practice seperti apa.
Semua tergantung latihan dan seberapa sering kita berhadapan dengan kasus-kasus
melakukan transformasi UI dari bentuk mockup ke dalam bentuk kode xml di Android.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
Dengan membiasakan melakukan penulisan kode sisi UI di xml tanpa penggunaan drag
and drop akan membentuk pola pikir dan feeling kita dalam membangun dan
mentransformasi UI ke dalam bentuk yang dibutuhkan. Ini bersifat Relatif, mungkin cara
membentuk UI dari satu developer android dengan developer android lainnya akan
berbeda.
Untuk lebih detail pemahaman tentang layout dapat dicek pada halaman ini :
Declaring Layout
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
ScrollView
Adalah layout yang akan membuat komponen di dalamnya dapat digeser (scroll) secara
vertical dan horizontal. Komponen di dalam Scrollview hanya diperbolehkan memiliki 1
parent utama dari LayoutLinear, RelativeLayout, FrameLayout, atau TableLayout.
ScrollView
Contoh 1 :
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
Misalkan ada dua tablet 7-inch (ukuran diagonal layar), tablet pertama (A) memiliki resolusi
layar 1200x1920px 320dpi dan yang lainnya (B) beresolusi 2048x1536px 326dpi. Membuat
button dengan ukuran 300x300px mungkin akan tampak normal pada tablet A tapi akan
tampak kecil di tablet B.
Tapi akan berbeda jika kita spesifikasikan ukuran button-nya dengan ukuran yang
bergantung pada density layar alias menggunakan dip misal 300x300dp. Secara fisik
ukuran button tersebut akan selalu sama pada ukuran layar yang berbeda.
Contoh 2 :
Pada gambar di atas ukuran 200dp akan dikonversi pada device mdpi (device dengan
density 160dpi/dots per inch) menjadi 200px dan menjadi 400px pada device xhdpi (density
420dpi) misal pada nexus 4. Sehingga ukuran tersebut tampak sama dan konsisten secara
fisik untuk beragam device dengan ukuran layar yang berbeda.
Link-link berikut akan membantu anda untuk jauh lebih memahami bagaimana aplikasi
anda bisa mendukung banyak layar device.
DP / PX Converter
Video Density-independent Pixels
Density Pixal dan Scale Pixel
Terasa kurang jika pemahaman esensi materi di atas tidak dilengkapi dengan praktik
langsung. Jadi, siap untuk ngoding lagi ?
Tujuan
Pada latihan kali ini anda akan mengembangkan sebuah halaman detail yang di dalamnya
terdiri beberapa implementasi View dan ViewGroup Layout. Tampilan akhir aplikasi kita
akan seperti ini :
1. Buat project baru di android studio dengan nama MyViewAndViews untuk API level
15 dan emptyactivity.
2. Lalu buka file build.gradle (Module: app) dan tambahkan satu baris ini di
bagian dependecies :
1. compile 'de.hdodenhof:circleimageview:2.1.0'
3. Lalu buka file strings.xml di res → values dan sesuaikan isinya dengan seperti ini
(Anda boleh copy paste ini),
1. <resources>
2. <string name="app_name">MyViewAndViews</string>
3. <string name="content_text">Google officially announced its much-anticipated Pixel
phones; the Pixel and Pixel XL, on October 4. We attended Google’s London UK event, mi
rroring the main one taking place in San Francisco, US, where the firm unwrapped the n
ew Android 7.1 Nougat devices which will apparently usurp Google’s long-standing Nexus
series.</string>
4. <string name="content_specs_display">5.0 inches\n
5. FHD AMOLED at 441ppi\n
6. 2.5D Corning® Gorilla® Glass 4</string>
7. <string name="content_specs_size">5.6 x 2.7 x 0.2 ~ 0.3 inches 143.8 x 69.5 x 7.3
~ 8.5 mm</string>
8. <string name="content_specs_battery">2,770 mAh battery\n
9. Standby time (LTE): up to 19 days\n
10. Talk time (3g/WCDMA): up to 26 hours\n
11. Internet use time (Wi-Fi): up to 13 hours\n
12. Internet use time (LTE): up to 13 hours\n
13. Video playback: up to 13 hours\n
14. Audio playback (via headset): up to 110 hours\n
15. Fast charging: up to 7 hours of use from only 15 minutes of charging</string>
16. </resources>
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
4. Selanjutnya, anda download aset yang dibutuhkan di sini atau anda bisa
menggunakan aset yang anda inginkan sebagai pengganti. Jika telah selesai, anda
copy semua aset yang dibutuhkan ke dalam direktori res → drawable.
5. Buka file activity_main.xml dan lengkapi kodenya seperti berikut :
1. <?xml version="1.0" encoding="utf-8"?>
2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3. xmlns:tools="http://schemas.android.com/tools"
4. android:id="@+id/activity_main"
5. android:layout_width="match_parent"
6. android:layout_height="match_parent"
7. android:background="@android:color/white"
8. tools:context="com.dicoding.myviewandviews.MainActivity">
9. <LinearLayout
10. android:layout_width="match_parent"
11. android:layout_height="wrap_content"
12. android:orientation="vertical">
13. <FrameLayout
14. android:layout_width="match_parent"
15. android:layout_height="wrap_content">
16. <ImageView
17. android:layout_width="match_parent"
18. android:layout_height="wrap_content"
19. android:adjustViewBounds="true"
20. android:src="@drawable/pixel_google"
21. android:scaleType="fitXY"/>
22. <TextView
23. android:layout_width="wrap_content"
24. android:layout_height="wrap_content"
25. android:padding="8dp"
26. android:text="6 Photos"
27. android:gravity="center_vertical"
28. android:drawableLeft="@drawable/ic_collections_white_18dp"
29. android:drawablePadding="4dp"
30. android:textAppearance="@style/TextAppearance.AppCompat.Small"
31. android:background="#4D000000"
32. android:textColor="@android:color/white"
33. android:layout_marginLeft="@dimen/activity_horizontal_margin"
34. android:layout_marginBottom="@dimen/activity_vertical_margin"
35. android:layout_gravity="bottom" />
36. </FrameLayout>
37. <TextView
38. android:layout_width="match_parent"
39. android:layout_height="wrap_content"
40. android:textSize="32sp"
41. android:text="$735"
42. android:layout_marginLeft="@dimen/activity_horizontal_margin"
43. android:layout_marginRight="@dimen/activity_horizontal_margin"
44. android:layout_marginTop="@dimen/activity_vertical_margin"
45. android:layout_marginBottom="8dp"
46. android:textColor="@android:color/black"/>
47. <TextView
48. android:layout_width="match_parent"
49. android:layout_height="wrap_content"
50. android:text="Stock hanya 5 buah"
51. android:textSize="12sp"
52. android:layout_marginLeft="@dimen/activity_horizontal_margin"
53. android:layout_marginRight="@dimen/activity_horizontal_margin"
54. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
55. <TextView
56. android:layout_width="match_parent"
57. android:layout_height="wrap_content"
58. android:text="@string/content_text"
59. android:layout_marginLeft="@dimen/activity_horizontal_margin"
60. android:layout_marginRight="@dimen/activity_horizontal_margin"
61. android:layout_marginBottom="@dimen/activity_vertical_margin"
62. android:lineSpacingMultiplier="1"
63. android:textColor="@android:color/black"/>
64. <TextView
65. android:layout_width="match_parent"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
66. android:layout_height="wrap_content"
67. android:text="Spesifikasi"
68. android:textSize="12sp"
69. android:layout_marginLeft="@dimen/activity_horizontal_margin"
70. android:layout_marginRight="@dimen/activity_horizontal_margin"
71. android:layout_marginBottom="8dp"/>
72. <TableLayout
73. android:layout_width="match_parent"
74. android:layout_height="wrap_content"
75. android:layout_marginLeft="@dimen/activity_horizontal_margin"
76. android:layout_marginRight="@dimen/activity_horizontal_margin"
77. android:layout_marginBottom="@dimen/activity_vertical_margin">
78. <TableRow
79. android:layout_width="match_parent"
80. android:layout_height="wrap_content"
81. android:layout_marginBottom="8dp">
82. <TextView
83. android:layout_width="wrap_content"
84. android:layout_height="wrap_content"
85. android:textSize="14sp"
86. android:layout_marginRight="@dimen/activity_vertical_margin"
87. android:text="Display"/>
88. <TextView
89. android:layout_width="match_parent"
90. android:layout_height="wrap_content"
91. android:textSize="14sp"
92. android:layout_weight="1"
93. android:text="@string/content_specs_display"
94. android:textColor="@android:color/black"/>
95. </TableRow>
96. <TableRow
97. android:layout_width="match_parent"
98. android:layout_height="wrap_content"
99. android:layout_marginBottom="8dp">
100. <TextView
101. android:layout_width="wrap_content"
102. android:layout_height="wrap_content"
103. android:textSize="14sp"
104. android:layout_marginRight="@dimen/activity_vertical_margin"
105. android:text="Size"/>
106. <TextView
107. android:layout_width="match_parent"
108. android:layout_height="wrap_content"
109. android:textSize="14sp"
110. android:layout_weight="1"
111. android:text="@string/content_specs_size"
112. android:textColor="@android:color/black"/>
113. </TableRow>
114. <TableRow
115. android:layout_width="match_parent"
116. android:layout_height="wrap_content"
117. android:layout_marginBottom="8dp">
118. <TextView
119. android:layout_width="wrap_content"
120. android:layout_height="wrap_content"
121. android:textSize="14sp"
122. android:layout_marginRight="@dimen/activity_vertical_margin"
123. android:text="Battery"/>
124. <TextView
125. android:layout_width="match_parent"
126. android:layout_height="wrap_content"
127. android:textSize="14sp"
128. android:layout_weight="1"
129. android:text="@string/content_specs_battery"
130. android:textColor="@android:color/black"/>
131. </TableRow>
132. </TableLayout>
133. <TextView
134. android:layout_width="match_parent"
135. android:layout_height="wrap_content"
136. android:text="Dijual oleh"
137. android:textSize="12sp"
138. android:layout_marginLeft="@dimen/activity_horizontal_margin"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
139. android:layout_marginRight="@dimen/activity_horizontal_margin"
140. android:layout_marginBottom="8dp"/>
141. <RelativeLayout
142. android:layout_width="match_parent"
143. android:layout_height="wrap_content"
144. android:layout_marginLeft="@dimen/activity_horizontal_margin"
145. android:layout_marginRight="@dimen/activity_horizontal_margin"
146. android:layout_marginBottom="@dimen/activity_vertical_margin">
147. <de.hdodenhof.circleimageview.CircleImageView
148. android:layout_width="56dp"
149. android:layout_height="56dp"
150. android:src="@drawable/photo_2"
151. android:layout_centerVertical="true"
152. android:id="@+id/profile_image"
153. android:layout_marginRight="@dimen/activity_horizontal_margin"/>
154. <TextView
155. android:layout_width="match_parent"
156. android:layout_height="wrap_content"
157. android:layout_toRightOf="@id/profile_image"
158. android:text="Narenda Wicaksono"
159. android:textColor="@android:color/black"
160. android:layout_centerVertical="true"/>
161. </RelativeLayout>
162. <Button
163. android:layout_width="match_parent"
164. android:layout_height="wrap_content"
165. android:text="Beli"
166. android:layout_marginLeft="@dimen/activity_horizontal_margin"
167. android:layout_marginRight="@dimen/activity_horizontal_margin"
168. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
169. </LinearLayout>
170. </ScrollView>
6. Pada properties android:text pasti akan ada warning yang tulisannya seperti
dibawah ini.
Ini terjadi ketika kita hardcode(menuliskan text string langsung pada view) pada
android:text. Solusinya adalah tekan alt+enter dengan arahkan cursor pada isi dari
android:text, maka akan muncul dialog seperti ini.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
Dan kemudian pilihlah Extract string resource, nanti akan muncul dialog baru lagi
yang tampilannya seperti ini
Dialog tersebut akan otomatis menambahkan text yang kita hardcode ke dalam res
→ strings.xml secara otomatis.
7. Lakukan juga untuk warning dari android:text lainnya dari semua view yang ada
pada activity_main.xml. Kemudian buka res → strings.xml, maka isi dari xmlnya akan
menjadi seperti berikut.
1. <resources>
2. <string name="app_name">MyViewAndViews</string>
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
8. Diketik ya, lumayan panjang bukan?. Oke terakhir pada MainActivity tambahkan
satu baris berikut :
1. getSupportActionBar().setTitle("Google Pixel");
Bedah Kode
Tidak ada yang rumit dibagian ini karena anda hanya berhadapan dengan bagaimana
membentuk sebuah tampilan aplikasi android yang bagus di file layout xml.
Di awal kita melakukan penambahan dependency untuk menampilkan sebuah custom
ImageView dalam bentuk lingkaran dengan menggunakan library CircleImageView yang
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
dibuat oleh Henning Dodenhoff. Library ini cukup populer dan selalu di-maintain dengan
baik.
1. compile 'de.hdodenhof:circleimageview:2.1.0'
1. <resources>
2. <string name="app_name">MyViewAndViews</string>
3. <string name="content_text">Google officially announced its much-anticipated Pixel phones;
the Pixel and Pixel XL, on October 4. We attended Google’s London UK event, mirroring the main
one taking place in San Francisco, US, where the firm unwrapped the new Android 7.1 Nougat dev
ices which will apparently usurp Google’s long-standing Nexus series.</string>
4. <string name="content_specs_display">5.0 inches\n
5. FHD AMOLED at 441ppi\n
6. 2.5D Corning® Gorilla® Glass 4</string>
7. <string name="content_specs_size">5.6 x 2.7 x 0.2 ~ 0.3 inches 143.8 x 69.5 x 7.3 ~ 8.5 mm
</string>
8. <string name="content_specs_battery">2,770 mAh battery\n
9. Standby time (LTE): up to 19 days\n
10. Talk time (3g/WCDMA): up to 26 hours\n
11. Internet use time (Wi-Fi): up to 13 hours\n
12. Internet use time (LTE): up to 13 hours\n
13. Video playback: up to 13 hours\n
14. Audio playback (via headset): up to 110 hours\n
15. Fast charging: up to 7 hours of use from only 15 minutes of charging</string>
16. <string name="stock_hanya_5_buah">Stock hanya 5 buah</string>
17. <string name="spesifikasi">Spesifikasi</string>
18. <string name="display">Display</string>
19. <string name="size">Size</string>
20. <string name="battery">Battery</string>
21. <string name="dijual_oleh">Dijual oleh</string>
22. <string name="narenda_wicaksono">Narenda Wicaksono</string>
23. <string name="beli">Beli</string>
24. <string name="_735">$735</string>
25. <string name="_6_photos">6 photos</string>
26. </resources>
Dan jika anda perhatikan, jika kita ingin menampilkan teks‘content_specs_size’ hanya
perlu menuliskan sebagai nilai atribut di dalam obyekTextView yang diinginkan.
1. <TextView
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content"
4. android:textSize="14sp"
5. android:layout_weight="1"
6. android:text="@string/content_specs_size"
7. android:textColor="@android:color/black"/>
Dan ya, dengan memanfaatkan strings.xml akan membuat anda lebih mudah nantinya
dalam membuat aplikasi ke dalam banyak bahasa.
Jika anda telah membaca dan memahami materi tentang Activity sebelumnya maka
seharusnya anda tidak akan bingung dengan atribut dan namespace yang digunakan
ketika kita membuat sebuah tampilan aplikasi pada file layout xml. Jadi silakan dibaca
kembali jika anda merasa lupa atau kurang paham.
1. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
2. xmlns:tools="http://schemas.android.com/tools"
3. android:id="@+id/activity_main"
4. android:layout_width="match_parent"
5. android:layout_height="match_parent"
6. android:background="@android:color/white"
7. tools:context="com.dicoding.myviewandviews.MainActivity">
8.
9. ...
10.
11. </ScrollView>
Ingat, semua komponen View dan ViewGroup memiliki dua buah atribut terpenting yang
harus selalu diberikan nilai untuk mengatur posisi dirinya di dalam sebuat layout, yaitu :
layout_width
layout_height
Kita akan menggunakan sebuah obyek ScrollView yang akan menjadi Root untuk tampilan
halaman aplikasi. Kenapa menggunakan ScrollView sebagai root / parent karena kita ingin
tampilan halaman dari aplikasi kita bisa di scroll ke bawah dan ke atas sehingga pengguna
dapat melihat tampilan secara menyeluruh.
1. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
3. android:id="@+id/activity_main"
4. android:layout_width="match_parent"
5. android:layout_height="match_parent"
6. android:background="@android:color/white"
7. tools:context="com.dicoding.myviewandviews.MainActivity">
8. <LinearLayout
9. android:layout_width="match_parent"
10. android:layout_height="wrap_content"
11. android:orientation="vertical">
12. ...
13. </LinearLayout>
14. </ScrollView>
Seperti yang dijelaskan sebelumnya, bahwa ScrollView hanya diperbolehkan memiliki satu
layout ViewGroup sebagai parent / root untuk obyek view di dalamnya. Di sini susunan
komponen view akan berada dalam orientasi vertikal.
1. <FrameLayout
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content">
4. <ImageView
5. android:layout_width="match_parent"
6. android:layout_height="wrap_content"
7. android:adjustViewBounds="true"
8. android:src="@drawable/pixel_google"
9. android:scaleType="fitXY"/>
10. <TextView
11. android:layout_width="wrap_content"
12. android:layout_height="wrap_content"
13. android:padding="8dp"
14. android:text="6 Photos"
15. android:gravity="center_vertical"
16. android:drawableLeft="@drawable/ic_collections_white_18dp"
17. android:drawablePadding="4dp"
18. android:textAppearance="@style/TextAppearance.AppCompat.Small"
19. android:background="#4D000000"
20. android:textColor="@android:color/white"
21. android:layout_marginLeft="@dimen/activity_horizontal_margin"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
22. android:layout_marginBottom="@dimen/activity_vertical_margin"
23. android:layout_gravity="bottom" />
24. </FrameLayout>
Gambar pixel_google yang tampil akan menjadi alas bagi obyek TextView yang berada di
atasnya. Ini seperti sifat dari komponen FrameLayout itu sendiri terhadap urutan posisi
atau struktur di dalamnya.
1. <TableLayout
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content"
4. android:layout_marginLeft="@dimen/activity_horizontal_margin"
5. android:layout_marginRight="@dimen/activity_horizontal_margin"
6. android:layout_marginBottom="@dimen/activity_vertical_margin">
7. <TableRow
8. android:layout_width="match_parent"
9. android:layout_height="wrap_content"
10. android:layout_marginBottom="8dp">
11. <TextView
12. android:layout_width="wrap_content"
13. android:layout_height="wrap_content"
14. android:textSize="14sp"
15. android:layout_marginRight="@dimen/activity_vertical_margin"
16. android:text="Display"/>
17. <TextView
18. android:layout_width="match_parent"
19. android:layout_height="wrap_content"
20. android:textSize="14sp"
21. android:layout_weight="1"
22. android:text="@string/content_specs_display"
23. android:textColor="@android:color/black"/>
24. </TableRow>
25. <TableRow
26. android:layout_width="match_parent"
27. android:layout_height="wrap_content"
28. android:layout_marginBottom="8dp">
29. <TextView
30. android:layout_width="wrap_content"
31. android:layout_height="wrap_content"
32. android:textSize="14sp"
33. android:layout_marginRight="@dimen/activity_vertical_margin"
34. android:text="Size"/>
35. <TextView
36. android:layout_width="match_parent"
37. android:layout_height="wrap_content"
38. android:textSize="14sp"
39. android:layout_weight="1"
40. android:text="@string/content_specs_size"
41. android:textColor="@android:color/black"/>
42. </TableRow>
43. <TableRow
44. android:layout_width="match_parent"
45. android:layout_height="wrap_content"
46. android:layout_marginBottom="8dp">
47. <TextView
48. android:layout_width="wrap_content"
49. android:layout_height="wrap_content"
50. android:textSize="14sp"
51. android:layout_marginRight="@dimen/activity_vertical_margin"
52. android:text="Battery"/>
53. <TextView
54. android:layout_width="match_parent"
55. android:layout_height="wrap_content"
56. android:textSize="14sp"
57. android:layout_weight="1"
58. android:text="@string/content_specs_battery"
59. android:textColor="@android:color/black"/>
60. </TableRow>
61. </TableLayout>
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB IV Views
1. <RelativeLayout
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content"
4. android:layout_marginLeft="@dimen/activity_horizontal_margin"
5. android:layout_marginRight="@dimen/activity_horizontal_margin"
6. android:layout_marginBottom="@dimen/activity_vertical_margin">
7. <de.hdodenhof.circleimageview.CircleImageView
8. android:layout_width="56dp"
9. android:layout_height="56dp"
10. android:src="@drawable/photo_2"
11. android:layout_centerVertical="true"
12. android:id="@+id/profile_image"
13. android:layout_marginRight="@dimen/activity_horizontal_margin"/>
14. <TextView
15. android:layout_width="match_parent"
16. android:layout_height="wrap_content"
17. android:layout_toRightOf="@id/profile_image"
18. android:text="Narenda Wicaksono"
19. android:textColor="@android:color/black"
20. android:layout_centerVertical="true"/>
21. </RelativeLayout>
1. getSupportActionBar().setTitle("Google Pixel");
Baris di atas akan mengganti nilai dari judul halaman pada ActionBar di dalam MainActivity.
Kenapa menggunakan getSupportActionBar() ? Karena kelas MainActivity inherit
kepada AppCompatActivity yang merupakan kelas turunan Activity. Kelas tersebut sudah
menyediakan fasilitas komponen ActionBar dan mampu mendukung untuk kompabilitas
ke semua versi OS android.
Selamat ! Anda sudah belajar tentang layout, view, dan ViewGroup sejauh ini dan semakin
sering anda berlatih untuk mentransformasikan sebuah desain menjadi sebuah file layout
xml tampilan aplikasi android maka akan semakin mahir anda. Setelah ini silakan anda
main-main lebih dalam lagi dan mencari tahu tentang implementasi material design di
aplikasi android.
Anda bisa mengunjungi tiga website ini untuk mencari inspirasi ketika membangun sebuah
User Interface untuk aplikasi anda.
BAB V
STYLE AND THEME
Pada bagian ini anda akan belajar dengan prinsip desain yang ada di android dan
bagaimana mengimplementasikan sebuah struktur yang mendefinisikan tampilan sebuah
view dan tampilan komponen aplikasi secara menyeluruh dalam sebuah file style. Prinsip
dasar dalam merancang antarmuka aplikasi android harus mematuhi kaidah yang
ditetapkan oleh Design Guideline yang dibuat oleh tim Android di Google. Diantaranya
adalah sebagai berikut :
Best Practice
Terdapat beberapa langkah-langkah terbaik (best practice) yang harus diperhatikan ketika
mengembangkan sebuah aplikasi android, ini korelasi antara User Interface dan
menuliskan kode dari sisi logika aplikasi.
1. Desain yang baik untuk performa aplikasi
Aplikasi yang dirancang dengan baik harus dapat dijalankan dengan cepat dan jika
terdapat proses yang memakan waktu, maka lakukan secara background
dan asynchronous
Berikan feedback ke pengguna terhadap sebuah aksi yang dilakukan contohnya jika
pengguna menekan sebuah tombol di aplikasi maka harus menampilkan efek
tekan.
Aplikasi yang baik adalah salah satunya pintar dalam melakukan efisiensi koneksi
ke jaringan internet dan memilah-milah mana task yang harus dijalankan pada saat
posisi device pengguna terhubung ke wifi (unmetered network) atau pun network
lain. Penggunaan koneksi jaringan yang baik akan menjadi hal wajib jika aplikasi
andaingin tetap digunakan oleh pengguna.
Ternyata tidak sedikit bukan aturan dalam mengembangkan aplikasi android yang baik.
Nilai yang bagus pada poin tampilan akan menopang kualitas fungsi di aplikasi yang anda
buat. Jangan sampai fungsi dari aplikasi anda bagus namun secara tampilan jelek dan
begitu pula sebaliknya. Pengguna akan mempertahankan aplikasi andadan tetap
menggunakannya selama aplikasi anda memang dibutuhkan dan memenuhi poin-poin di
atas.
Kembali lagi pada topik style dan theme. Jika anda pernah mengembangkan sebuah
aplikasi berbasis web seharusnya anda sudah tidak asing lagi dengan file CSS (Cascading
Style Sheet) yang merupakan sebuah file yang mendefinisikan bagaimana komponen dan
tampilan sebuah halaman website. Pendekatan yang serupa juga berlaku di android, ini
yang dinamakan style.
Style merupakan sebuah kumpulan property yang dibutuhkan untuk mendefinisikan
bagaimana sebuah komponen View dan layar jendela (bisa Activity maupun fragment)
ditampilkan seperti property height, width, background_color dan lain
sebagainya. Styleterdefinisi dalam file xml sendiri, anda bisa menemukannya di res
→ values → styles.xml.
Contoh umumnya anda memiliki sebuah TextView yang berisi berbagai attribute seperti
ini. Let’s say ini adalah obyek TextViewuntuk menampilkan konten dari detail informasi
yang terdapat di keseluruhan aplikasi dan diimplementasikan di banyak file layout xml.
1. <TextView
2. android:layout_width="match_parent"
3. android:layout_height="wrap_content"
4. android:textColor="#00FF00"
5. android:typeface="monospace"
6. android:text="@string/hello" />
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
Akan sangat tidak efektif jika kita hanya melakukan copy paste dari satu layout xml ke
layout xml lainnya yang sebetulnya bisa kita sederhanakan seperti ini :
1. <TextView
2. style="@style/CodeFont"
3. android:text="@string/hello" />
Beberapa aturan yang harus diperhatikan ketika kita menggunakan styles yaitu:
Parent : Nilai style yang akan mewarisi dari style (berikut dengan attribute di
dalamnya) yang telah ada, umumnya bawaan dari sdk ataupun platform.
Style yang akan kita warisi akan dapat anda ubah dan tambahkan nilai attribute
dalam style baru yang anda buat. Di android sendiri sudah menyediakan
beragam style yang bisa anda gunakan untuk beragam tampilan.
3. Semua attribut yang akan didefinisikan dalam sebuah style harus berada dalam tag
<item></item
1. <item name="android:layout_width">match_parent</item>
Andaikan dalam satu kasus anda ingin membuat varian dari style yang telah anda buat.
Misal untuk style CodeFront anda ingin ada yang berwarna merah anda bisa
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
menambahkan style baru dengan hanya menambahkan prefix dari style sebelumnya dan
nama dari style yang baru dipisahkan oleh titik seperti ini :
1. <style name="CodeFont.Red">
2. <item name="android:textColor">#FF0000</item>
3. </style>
atau berwarna merah dan juga dengan ukuran yang besar menjadi seperti ini :
1. <style name="CodeFont.Red">
2. <item name="android:textColor">#FF0000</item>
3. <item name="android:textSize">30sp</item>
4. </style>
Mudah bukan? Anda baru saja belajar tentang bagaimana sebuah style dibuat dan
diimplementasikan, selanjutnya bagaimana dengan theme?
Theme atau tema itu sendiri merupakan sebuah style yang diimplementasikan khusus
untuk Activity dan Application pada file AndroidManifest.xml. Pada project sebelumnya
kita mendefinisikannya seperti ini :
1. android:theme="@style/AppTheme"
1. <resources>
2. <!-- Base application theme. -->
3. <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
4. <!-- Customize your theme here. -->
5. <item name="colorPrimary">@color/colorPrimary</item>
6. <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
7. <item name="colorAccent">@color/colorAccent</item>
8. </style>
9. </resources>
Sebuah styles yang inherit ke tema AppCompat untuk varian light dan
memiliki DarkActionBar. Semua nilai pada atribut terdapat pada file colors.xml yang berisi
1. <resources>
2. <color name="colorPrimary">#3F51B5</color>
3. <color name="colorPrimaryDark">#303F9F</color>
4. <color name="colorAccent">#FF4081</color>
5. </resources>
Saat ini pengembangan aplikasi Android mengacu pada implementasi guideline material
design sebagai konsep utama dalam mengembangkan user interface dan user experience.
Anda bisa mempelajari lebih lanjut tentang material design di android pada link ini :
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
Material Design
Ok, saya tahu anda sudah tidak sabar ingin ngoding dan tenang tidak akan banyak kode
yang anda tulis kali ini.
Kita akan memodifikasi dari project sebelumnya dan mengimplementasikan teori di atas.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
PRAKTEK
Pada Codelab kali kita akan menerapkan Style dan Theme pada sample aplikasi yang telah
kita buat sebelumnya pada modul Viewsdan ViewsGroup. Beberapa poin yang didapatkan
pada materi ini adalah :
29. </style>
30.
31. <style name="TextContent.Black">
32. <item name="android:textColor">@android:color/black</item>
33. </style>
34.
35. <style name="TextSpec">
36. <item name="android:textSize">14sp</item>
37. </style>
38.
39. <style name="TextSpec.Field">
40. <item name="android:layout_width">wrap_content</item>
41. <item name="android:layout_height">wrap_content</item>
42. <item name="android:layout_marginRight">16dp</item>
43. <item name="android:textColor">@color/colorSubTitle</item>
44.
45. </style>
46. <style name="TextSpec.Value">
47. <item name="android:layout_width">match_parent</item>
48. <item name="android:layout_height">wrap_content</item>
49. <item name="android:layout_weight">1</item>
50. <item name="android:textColor">@android:color/black</item>
51. </style>
52. </resources>
3. Jika selesai, kita akan implementasikan style-style yang barusan dibuat ke dalam
file activity_main.xml dan kondisikan seperti ini :
1. <?xml version="1.0" encoding="utf-8"?>
2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3. xmlns:tools="http://schemas.android.com/tools"
4. android:id="@+id/activity_main"
5. android:layout_width="match_parent"
6. android:layout_height="match_parent"
7. android:background="@android:color/white"
8. tools:context="com.dicoding.myviewandviews.MainActivity">
9. <LinearLayout
10. android:layout_width="match_parent"
11. android:layout_height="wrap_content"
12. android:orientation="vertical">
13. <FrameLayout
14. android:layout_width="match_parent"
15. android:layout_height="wrap_content">
16. <ImageView
17. android:layout_width="match_parent"
18. android:layout_height="wrap_content"
19. android:adjustViewBounds="true"
20. android:src="@drawable/pixel_google"
21. android:scaleType="fitXY"/>
22. <TextView
23. style="@style/TextContent.Small.White"
24. android:padding="8dp"
25. android:text="@string/_6_photos"
26. android:gravity="center_vertical"
27. android:drawableLeft="@drawable/ic_collections_white_18dp"
28. android:drawablePadding="4dp"
29. android:textAppearance="@style/TextAppearance.AppCompat.Small"
30. android:background="#4D000000"
31. android:layout_marginLeft="@dimen/activity_horizontal_margin"
32. android:layout_marginBottom="@dimen/activity_vertical_margin"
33. android:layout_gravity="bottom" />
34. </FrameLayout>
35. <TextView
36. style="@style/TextContent.Black"
37. android:textSize="32sp"
38. android:text="@string/_735"
39. android:layout_marginTop="@dimen/activity_vertical_margin"
40. android:layout_marginBottom="8dp"/>
41. <TextView
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
42. style="@style/TextContent.Subtitle"
43. android:text="@string/stock_hanya_5_buah"
44. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
45. <TextView
46. style="@style/TextContent"
47. android:text="@string/content_text"
48. android:layout_marginBottom="@dimen/activity_vertical_margin"
49. android:lineSpacingMultiplier="1"
50. android:textColor="@android:color/black"/>
51. <TextView
52. style="@style/TextContent.Subtitle"
53. android:text="@string/spesifikasi"
54. android:layout_marginBottom="8dp"/>
55. <TableLayout
56. android:layout_width="match_parent"
57. android:layout_height="wrap_content"
58. android:layout_marginLeft="@dimen/activity_horizontal_margin"
59. android:layout_marginRight="@dimen/activity_horizontal_margin"
60. android:layout_marginBottom="@dimen/activity_vertical_margin">
61. <TableRow
62. android:layout_width="match_parent"
63. android:layout_height="wrap_content"
64. android:layout_marginBottom="8dp">
65. <TextView
66. style="@style/TextSpec.Field"
67. android:text="@string/display"/>
68. <TextView
69. style="@style/TextSpec.Value"
70. android:text="@string/content_specs_display"/>
71. </TableRow>
72. <TableRow
73. android:layout_width="match_parent"
74. android:layout_height="wrap_content"
75. android:layout_marginBottom="8dp">
76. <TextView
77. style="@style/TextSpec.Field"
78. android:text="@string/size"/>
79. <TextView
80. style="@style/TextSpec.Value"
81. android:text="@string/content_specs_size"/>
82. </TableRow>
83. <TableRow
84. android:layout_width="match_parent"
85. android:layout_height="wrap_content"
86. android:layout_marginBottom="8dp">
87. <TextView
88. style="@style/TextSpec.Field"
89. android:text="@string/battery"/>
90. <TextView
91. style="@style/TextSpec.Value"
92. android:text="@string/content_specs_battery"/>
93. </TableRow>
94. </TableLayout>
95. <TextView
96. style="@style/TextContent.Subtitle"
97. android:text="@string/dijual_oleh"
98. android:layout_marginBottom="8dp"/>
99. <RelativeLayout
100. android:layout_width="match_parent"
101. android:layout_height="wrap_content"
102. android:layout_marginLeft="@dimen/activity_horizontal_margin"
103. android:layout_marginRight="@dimen/activity_horizontal_margin"
104. android:layout_marginBottom="@dimen/activity_vertical_margin">
105. <de.hdodenhof.circleimageview.CircleImageView
106. android:layout_width="56dp"
107. android:layout_height="56dp"
108. android:src="@drawable/photo_2"
109. android:layout_centerVertical="true"
110. android:id="@+id/profile_image"
111. android:layout_marginRight="@dimen/activity_horizontal_margin"/>
112. <TextView
113. style="@style/TextContent"
114. android:layout_toRightOf="@id/profile_image"
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
115. android:text="@string/narenda_wicaksono"
116. android:layout_centerVertical="true"/>
117. </RelativeLayout>
118. <Button
119. android:layout_width="match_parent"
120. android:layout_height="wrap_content"
121. android:text="@string/beli"
122. android:layout_marginLeft="@dimen/activity_horizontal_margin"
123. android:layout_marginRight="@dimen/activity_horizontal_margin"
124. android:layout_marginBottom="@dimen/activity_vertical_margin"/>
125. </LinearLayout>
126. </ScrollView>
4. Jika selesai coba jalankan aplikasi anda dan seharusnya hasilnya menjadi seperti
ini.
1. <TextView
2. style="@style/TextContent.Subtitle"
3. android:text="@string/dijual_oleh"
4. android:layout_marginBottom="8dp"/>
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
5. Hmm ada yang kurang lengkap rasanya, tombol kita masih dalam posisi default.
Sekarang, kita coba ubah agar lebih menyatu dengan tema aplikasi kita saat ini.
Buka kembali styles.xml dan tambahkan baris-baris ini di atas tag </resources>
1. <style name="ButtonGeneral" parent="@style/Widget.AppCompat.Button.Colored">
2. <item name="android:layout_width">match_parent</item>
3. <item name="android:layout_height">wrap_content</item>
4. <item name="android:layout_marginRight">@dimen/activity_horizontal_margin</item>
5. <item name="android:layout_marginLeft">@dimen/activity_horizontal_margin</item>
6. <item name="android:layout_marginBottom">@dimen/activity_vertical_margin</item>
7. </style>
7. Jalankan kembali aplikasi anda dan seharusnya tampilannya akan menjadi seperti
ini.
Sekarang coba anda klik dan tahan, jika device android anda berada di bawah
lollipop (API level 21) seharusnya otomatis akan menampilkan warna lebih gelap
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB V STYLE DAN THEME
sedangkan jika di atas lollipop akan ada efek air (ripple) ketika obyek Button anda
klik.
Akan secara otomatis mengambil nilai accentColor sebagai nilai warna indikator
aktif untuk obyek Button dan nilai pada attribute colorButtonNormal sebagai nilai
gelap ketika obyek Button ditekan.
Selesai! Saat ini anda sudah memahami bagaimana theme dan style diterapkan dalam
membangun sebuah aplikasi di Android. Pengelompokan attribute untuk View yang sama
akan lebih memudahkan anda dalam menentukan dan penyeragaman format View yang
akan ditampilkan ke dalam layar.
Seperti biasa, untuk lebih membuat anda paham tentang materi ini kami rekomendasikan
anda untuk membaca lebih lanjut di :
Ui Theme
Material Design
Selamat ! Satu langkah besar sudah anda lalui, sekarang ayo kita lanjut ke materi yang
lebih seru!
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
BAB VI
LIST VIEW
Pada materi tentang loader sebelumnya kita telah belajar bagaimana menampilkan
kumpulan data dalam bentuk sebuah list. Kita menggunakan obyek ListView untuk
menampilkan data-data yang berasal dari kontak di device pengguna ke layar. Sangat
sederhana tapi sangat berarti. Kenapa? Pada dasarnya interaksi umum antara pengguna
dengan aplikasi dalam menampilkan data dalam jumlah yang banyak adalah dengan
menggunakan list yang bisa di-scroll ke atas dan ke bawah hanya dengan menggunakan
jempol tangan kanan.
ListView menjadi komponen pertama yang mengakomodasi hal tersebut, namun semenjak
Google merilis pendekatan desain bernama material design, RecyclerView menjadi pilihan
pertama yang harus developer gunakan. Anda masih bisa menggunakan kedua komponen
tersebut secara berdampingan dalam satu aplikasi.
Secara definisi RecyclerView adalah sebuah komponen tampilan (widget) yang lebih
canggih ketimbang pendahulunya ListViewdan bersifat lebih fleksibel. Dan yang paling
penting adalah RecyclerView memiliki kemampuan untuk menampilkan data secara
efisien dalam jumlah yang besar. Terlebih jika anda memiliki koleksi data yang tiap
elemennya mampu berubah-ubah sewaktu dijalankan (runtime) karena interaksi
pengguna atau karena adanya pengaruh dari jaringan internet.
Gambar di atas akan menjelaskan beberapa komponen yang harus anda tahu sebelum
menggunakan RecyclerView.
4. Item Animator : Ini yang spesial, kita bisa set animasi untuk tiap item di dalamnya
bahkan bisa membuat kustomisasi animasi. Contoh animasi yang umum seperti
penambahan (add) dan penghapusan (removal) item. Kita akan mempelajari hal ini
pada materi terpisah.
6. Definisikan obyek RecyclerView berikut dengan bentuk yang diinginkan (bisa dalam
bentuk list, grid, atau staggered) dan selanjutnya pasang obyek adapter (binding)
agar bisa menampilkan koleksi data ke dalam RecyclerView.
Untuk membuat anda makin paham tentang RecyclerView kami sarankan anda untuk
lanjut membaca materi pada link berikut
List Cards
Recycler View
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
PRAKTEK
Baik, pada Codelab kali ini kalian akan belajar menampilkan data Presiden Republik
Indonesia ke dalam sebuah RecyclerView. Beberapa poin yang akan dikover dalam materi
ini adalah :
Contoh dari RecyclerView yang akan kita buat dalam tiga bentuk :
Semuanya berada dalam satu halaman saja dengan cukup menambahkan menuseperti
berikut:
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
Keren bukan? Baik, agar anda tidak penasaran lagi ayo kita langsung mulai koding.
1. Buat project baru dengan nama MyRecyclerView dengan minimal level SDK di 15
dan dengan template MainActivity di pilihan EmptyActivity.
Sehingga secara keseluruhan file build.gradle(module: app) anda akan seperti ini :
Yang anda harus perhatikan adalah Android Studio anda harus tetap up-to-date,
baik itu dari sisi editor maupun Android SDK tools, platform tools, build tools, dan
android support repository. Anda bisa mengeceknya di menu bar tools → Android →
SDK Manager → Launch stand alone SDK Manager seperti berikut :
12. </RelativeLayout>
4. Setelah selesai kita akan membuat beberapa kelas terkait koleksi data yang ingin
ditampilkan, buat kelas baru dengan nama PresidentData dan lengkapi kodenya
menjadi seperti berikut :
1. public class PresidentData {
2. public static String[][] data = new String[][]{
3. {"Soekarno", "Presiden Pertama RI", "https://upload.wikimedia.org/wikipedi
a/commons/thumb/0/01/Presiden_Sukarno.jpg/418px-Presiden_Sukarno.jpg"},
4. {"Soeharto", "Presiden Kedua RI", "https://upload.wikimedia.org/wikipedia/
commons/thumb/5/59/President_Suharto%2C_1993.jpg/468px-President_Suharto%2C_1993.jpg"}
,
5. {"Bacharuddin Jusuf Habibie", "Presiden Ketiga RI", "https://upload.wikime
dia.org/wikipedia/commons/thumb/f/f1/Bacharuddin_Jusuf_Habibie_official_portrait.jpg/5
20px-Bacharuddin_Jusuf_Habibie_official_portrait.jpg"},
6. {"Abdurrahman Wahid", "Presiden Keempat RI", "https://upload.wikimedia.org
/wikipedia/commons/thumb/3/35/President_Abdurrahman_Wahid_-_Indonesia.jpg/486px-Presid
ent_Abdurrahman_Wahid_-_Indonesia.jpg"},
7. {"Megawati Soekarnoputri", "Presiden Kelima RI", "https://upload.wikimedia
.org/wikipedia/commons/thumb/8/88/President_Megawati_Sukarnoputri_-_Indonesia.jpg/540p
x-President_Megawati_Sukarnoputri_-_Indonesia.jpg"},
8. {"Susilo Bambang Yudhoyono", "Presiden Keenam RI", "https://upload.wikimed
ia.org/wikipedia/commons/5/58/Presiden_Susilo_Bambang_Yudhoyono.png"},
9. {"Joko Widodo", "Presiden Ketujuh RI", "https://upload.wikimedia.org/wikip
edia/commons/1/1c/Joko_Widodo_2014_official_portrait.jpg"}
10. };
11.
12. public static ArrayList<President> getListData(){
13. President president = null;
14. ArrayList<President> list = new ArrayList<>();
15. for (int i = 0; i <data.length; i++) {
16. president = new President();
17. president.setName(data[i][0]);
18. president.setRemarks(data[i][1]);
19. president.setPhoto(data[i][2]);
20.
21. list.add(president);
22. }
23.
24. return list;
25. }
26. }
5. Kemudian buat lagi satu kelas model data bernama President dan lengkapi
kodenya menjadi seperti berikut :
1. public class President {
2. private String name, remarks, photo;
3.
4. public String getName() {
5. return name;
6. }
7.
8. public void setName(String name) {
9. this.name = name;
10. }
11.
12. public String getRemarks() {
13. return remarks;
14. }
15.
16. public void setRemarks(String remarks) {
17. this.remarks = remarks;
18. }
19.
20. public String getPhoto() {
21. return photo;
22. }
23.
24. public void setPhoto(String photo) {
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
6. Setelah selesai dengan model data, saatnya kita membuat sebuah item tampilan
dalam bentuk file layout xml yang akan ditampilkan di RecyclerView. Karena
pertama kali akan ditampilkan dalam bentuk list maka kita buat dengan
nama item_row_president dengan cara klik kanan pada direktori layout → new →
layout resource file dan lengkapi kodenya menjadi seperti berikut :
1. <?xml version="1.0" encoding="utf-8"?>
2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:orientation="horizontal" android:layout_width="match_parent"
4. android:layout_height="wrap_content"
5. android:padding="@dimen/activity_vertical_margin">
6. <de.hdodenhof.circleimageview.CircleImageView
7. android:id="@+id/img_item_photo"
8. android:layout_width="55dp"
9. android:layout_height="55dp"
10. android:layout_marginRight="@dimen/activity_horizontal_margin"/>
11. <LinearLayout
12. android:layout_width="match_parent"
13. android:layout_height="wrap_content"
14. android:layout_toRightOf="@id/img_item_photo"
15. android:layout_centerVertical="true"
16. android:orientation="vertical">
17. <TextView
18. android:id="@+id/tv_item_name"
19. android:layout_width="match_parent"
20. android:layout_height="wrap_content"
21. android:text="Name"
22. android:textStyle="bold"
23. android:textSize="16sp"
24. android:layout_marginBottom="8dp"/>
25. <TextView
26. android:id="@+id/tv_item_remarks"
27. android:layout_width="match_parent"
28. android:layout_height="wrap_content"
29. android:text="Remarks"/>
30. </LinearLayout>
31. </RelativeLayout>
7. Setelah selesai dengan model data dan file layout xml sekarang saatnya kita
membuat sebuah kelas adapter yang akan memformat bagaimana tiap elemen dari
koleksi data yang kita punya ditampilkan. Buat kelas adapter secara manual
dengan klik kanan pada package utama → new → Java Class dan beri
nama ListPresidentAdapter. Setelah tercipta lengkapi kodenya menjadi seperti
berikut :
1. public class ListPresidentAdapter extends RecyclerView.Adapter<ListPresidentAdapter.Ca
tegoryViewHolder>{
2. private Context context;
3.
4. public ArrayList<President> getListPresident() {
5. return listPresident;
6. }
7. public void setListPresident(ArrayList<President> listPresident) {
8. this.listPresident = listPresident;
9. }
10.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
22. rvCategory.setAdapter(listPresidentAdapter);
23. }
24. }
9. Karena data gambar yang kita miliki berasal dari internet maka kita harus
menambahkan sebuah permission ke dalam file AndroidManifest.xml yang kita
miliki. Tambahkan satu baru berikut di atas tag <application>
1. <uses-permission android:name="android.permission.INTERNET" />
Sehingga secara keseluruhan file AndroidManifest.xml yang kita miliki saat ini
menjadi seperti berikut :
10. Sekarang coba jalankan terlebih dahulu aplikasi yang kita buat dan seharusnya
hasilnya akan seperti berikut :
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
Keren..
Satu bentuk RecyclerView untuk menampilkan data Presiden Republik Indonesia
sudah tercipta.
11. Ok perhatikan pada hasil yang dijelaskan di awal kita memiliki satu mekanisme
untuk menampilkan bentuk dari RecyclerView yaitu dengan memanfaatkan fasilitas
menu, sekarang mari kita buat.
Langkah pertama adalah dengan membuat resource directory terkait yang mana
resource directory menu tidak secara default disediakan. Ok klik kanan pada
direktori res → new → android resource directory. Setelah muncul dialog box seperti
di bawah ini, isikan menu pada field directory name. Klik OK untuk
menyelesaikannya.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
12. Selanjutnya setelah terbuat direktori menu, klik kanan pada direktori tersebut →
new → menu resource file, beri nama menu_main pada field file name dan setelah
terbentuk lengkapi kodenya menjadi seperti berikut :
1. <?xml version="1.0" encoding="utf-8"?>
2. <menu xmlns:android="http://schemas.android.com/apk/res/android"
3. xmlns:app="http://schemas.android.com/apk/res-auto">
4. <item
5. android:id="@+id/action_list"
6. android:title="List"
7. app:showAsAction="never"/>
8. <item
9. android:id="@+id/action_grid"
10. android:title="Grid"
11. app:showAsAction="never"/>
12. <item
13. android:id="@+id/action_cardview"
14. android:title="with CardView"
15. app:showAsAction="never"/>
16. </menu>
13. Setelah selesai, saatnya kita pasang file menu tersebut di MainActivity dengan
menambahkan dua method berikut :
1. @Override
2. public boolean onCreateOptionsMenu(Menu menu) {
3. getMenuInflater().inflate(R.menu.menu_main, menu);
4. return super.onCreateOptionsMenu(menu);
5. }
6.
7. @Override
8. public boolean onOptionsItemSelected(MenuItem item) {
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
9.
10. switch (item.getItemId()){
11. case R.id.action_list:
12.
13. break;
14.
15. case R.id.action_grid:
16.
17. break;
18.
19. case R.id.action_cardview:
20.
21. break;
22. }
23. return super.onOptionsItemSelected(item);
24. }
Untuk dua method di atas anda bisa menggunakan ctrl (tahan) + spasi untuk
menampilkan code assistant pada android studio.
Sekarang seharusnya kelas MainActivity kita saat ini berisi seperti berikut :
Sekarang coba jalankan kembali aplikasimu dan seharusnya akan seperti ini
tampilannya.
6. android:id="@+id/img_item_photo"
7. android:layout_width="match_parent"
8. android:layout_height="250dp"
9. android:scaleType="centerCrop"
10. android:layout_margin="1dp"/>
11. </LinearLayout>
2. Setelah selesai, lanjut ke pembuatan adapter untuk file layout xml tersebut. Buat
sebuah kelas baru dengan nama GridPresidentAdapter dan lengkapi kodenya
menjadi seperti berikut :
1. public class GridPresidentAdapter extends RecyclerView.Adapter<GridPresidentAdapter.Gr
idViewHolder> {
2. private Context context;
3. private ArrayList<President>listPresident;
4.
5. public ArrayList<President> getListPresident() {
6. return listPresident;
7. }
8.
9. public void setListPresident(ArrayList<President> listPresident) {
10. this.listPresident = listPresident;
11. }
12.
13. public GridPresidentAdapter(Context context) {
14. this.context = context;
15. }
16.
17. @Override
18. public GridViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
19. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_gri
d_president, parent, false);
20. GridViewHolder gridViewHolder = new GridViewHolder(view);
21. return gridViewHolder;
22. }
23.
24. @Override
25. public void onBindViewHolder(GridViewHolder holder, int position) {
26. Glide.with(context)
27. .load(getListPresident().get(position).getPhoto())
28. .override(350, 550)
29. .into(holder.imgPhoto);
30. }
31.
32. @Override
33. public int getItemCount() {
34. return getListPresident().size();
35. }
36. public class GridViewHolder extends RecyclerView.ViewHolder{
37. ImageView imgPhoto;
38. public GridViewHolder(View itemView) {
39. super(itemView);
40. imgPhoto = (ImageView)itemView.findViewById(R.id.img_item_photo);
41. }
42. }
43. }
7. @Override
8. public boolean onOptionsItemSelected(MenuItem item) {
9. switch (item.getItemId()){
10. case R.id.action_list:
11. showRecyclerList();
12. break;
13. case R.id.action_grid:
14. showRecyclerGrid();
15. break;
16. case R.id.action_cardview:
17. break;
18. }
19. return super.onOptionsItemSelected(item);
20. }
4. Ini akan update tampilan ketika id dari action menu yang dipilih ditekan oleh
pengguna. Sekarang coba jalankan lagi aplikasi anda, maka sekarang anda sudah
bisa menampilkan dua bentuk dari RecyclerView yaitu list dan grid. Yeay!!
1. Tinggal satu lagi, ayo kita lanjutkan dengan membuat bentuk RecyclerView dengan
komponen CardView.
Penggunaan CardView merupakan salah satu pattern yang direkomendasikan pada
pendekatan MaterialDesign yang dimana item-item pada koleksi data ditampilkan
dengan bungkusan layaknya sebuah kartu. Penggunaan pendekatan hanya
diperuntukkan jika dalam item list tersebut memiliki lebih dari satu action. Baik,
buat kembali file layout xml item_cardview_president dan lengkapi kodenya
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
71. </android.support.v7.widget.CardView>
3. Untuk handle ketika dua tombol yang kita miliki diklik silakan buat kelas baru
dengan nama CustomOnItemClickListener dan lengkapi kodenya menjadi seperti
berikut :
7. @Override
8. public boolean onOptionsItemSelected(MenuItem item) {
9.
10. switch (item.getItemId()){
11. case R.id.action_list:
12. showRecyclerList();
13. break;
14.
15. case R.id.action_grid:
16. showRecyclerGrid();
17. break;
18.
19. case R.id.action_cardview:
20. showRecyclerCardView();
21. break;
22. }
23. return super.onOptionsItemSelected(item);
24. }
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
6. Untuk mempercantik tampilan dan menyesuaikan dengan target yang di awal, kita
akan melakukan penambahan method untuk mengubah judul halaman setiap kita
melakukan perubahan bentuk dari RecyclerView.
1. private void setActionBarTitle(String title){
2. getSupportActionBar().setTitle(title);
3. }
4. @Override
5. public boolean onOptionsItemSelected(MenuItem item) {
6. String title = null;
7. switch (item.getItemId()){
8. case R.id.action_list:
9. title = "Mode List";
10. showRecyclerList();
11. break;
12. case R.id.action_grid:
13. showRecyclerGrid();
14. title = "Mode Grid";
15. break;
16.
17. case R.id.action_cardview:
18. title = "Mode CardView";
19. showRecyclerCardView();
20. break;
21. }
22. setActionBarTitle(title);
23. return super.onOptionsItemSelected(item);
24. }
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
1. Tidak seperti ListView yang memiliki listener untuk melakukan sebuah aksi ketika
salah satu item pada list dipilih. Pada RecyclerView kita harus membuatnya secara
manual.
Namun tenang kami akan menunjukan bagaimana caranya menghandle ketika
salah satu item pada list di RecyclerViewdipilih.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
Pertama buat file bernama ids pada direktori values. Klik kanan pada values → new
→ Value resource file dan isikan ids pada field file name.
Setelah terbentuk lengkapi kodenya menjadi seperti berikut :]
1. <?xmlversion="1.0" encoding="utf-8"?>
2. <resources>
3. <item name="item_click_support"type="id" />
4. </resources>
2. Selanjutnya buat kelas baru dengan nama ItemClickSupport dan lengkapi kodenya
menjadi seperti berikut :
1. public class ItemClickSupport {
2. private final RecyclerView mRecyclerView;
3. private OnItemClickListener mOnItemClickListener;
4. private OnItemLongClickListener mOnItemLongClickListener;
5.
6. private ItemClickSupport(RecyclerView recyclerView) {
7. mRecyclerView = recyclerView;
8. mRecyclerView.setTag(R.id.item_click_support, this);
9. mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
10. }
11.
12. private View.OnClickListener mOnClickListener = new View.OnClickListener() {
13.
14. @Override
15. public void onClick(View v) {
16. if (mOnItemClickListener != null) {
17. RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
18. mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPositi
on(), v);
19. }
20. }
21. };
22. private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener(
) {
23.
24. @Override
25. public boolean onLongClick(View v) {
26. if (mOnItemLongClickListener != null) {
27. RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
28. return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.g
etAdapterPosition(), v);
29. }
30. return false;
31. }
32. };
33. private RecyclerView.OnChildAttachStateChangeListener mAttachListener
34. = new RecyclerView.OnChildAttachStateChangeListener() {
35.
36. @Override
37. public void onChildViewAttachedToWindow(View view) {
38. if (mOnItemClickListener != null) {
39. view.setOnClickListener(mOnClickListener);
40. }
41. if (mOnItemLongClickListener != null) {
42. view.setOnLongClickListener(mOnLongClickListener);
43. }
44. }
45.
46. @Override
47. public void onChildViewDetachedFromWindow(View view) {
48. }
49. };
50. public static ItemClickSupport addTo(RecyclerView view) {
51. ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support
);
52. if (support == null) {
53. support = new ItemClickSupport(view);
54. }
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
Pada prinsipnya kelas ItemClickSupport akan menjadi satu kelas handler untuk
melakukan action ketika pengguna menekan atau melakukan klik yang lama (long
clicked) terhadap salah satu item pada RecyclerView.
3. Setelah selesai, mari kita pasang pada MainActivity dan tambahkan satu method ini
untuk menandakan item mana yang dipilih.
1. private void showSelectedPresident(President president){
2. Toast.makeText(this, "Kamu memilih "+president.getName(), Toast.LENGTH_SHORT).show();
3. }
Dan tambahkan pada masing-masing method di list dan grid seperti berikut :
25. @Override
26. public void onItemClicked(RecyclerView recyclerView, int position, View v) {
27. showSelectedPresident(list.get(position));
28. }
29. });
30. }
4. Sekarang jalankan kembali aplikasi kamu dan coba kamu klik salah satu item
pada RecyclerView bentuk list dan grid seharusnya akan menampilkan
sebuah obyek Toast terhadap item yang ditekan.
Selesai! Sampai saat ini kamu telah berhasil mengimplementasikan beragam bentuk
dari RecyclerView dan mudah bukan?
Ini akan sangat penting sekali karena ke depannya pasti kamu akan berhadapan dengan
koleksi data yang harus ditampilkan ke dalam bentuk list.
Dan selamat kamu sudah belajar banyak sejauh ini.
Bedah Kode
Pendekatan umum dalam mengembangkan aplikasi mobile terletak pada bentuk list to
detail dengan artian menampilkan sejumlah informasi dalam bentuk list dan kemudian
pengguna melakukan klik untuk mendapatkan detail informasi pada item pada list yang
dipilih.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
1. @Override
2. public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
3. View itemRow = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row_presiden
t, parent, false);
4. return new CategoryViewHolder(itemRow);
5. }
6.
7. @Override
8. public void onBindViewHolder(CategoryViewHolder holder, int position) {
9. holder.tvName.setText(getListPresident().get(position).getName());
10. holder.tvRemarks.setText(getListPresident().get(position).getRemarks());
11.
12. Glide.with(context)
13. .load(getListPresident().get(position).getPhoto())
14. .override(55, 55)
15. .crossFade()
16. .into(holder.imgPhoto);
17. }
18.
Modul Pemograman Perangkat Bergerak @SMKN1TALAGA
Dibuat Oleh : Andre Septian, S.T.
BAB VI LIST VIEW
Setiap kali kita melakukan scroll pada RecyclerView secara otomatis RecyclerView akan
mengecek ke memori apakah obyek item view pada indeks tertentu sudah berada di
memori atau belum. Jika belum maka akan dilakukan sebuah proses casting
view (findViewById) yang berharga sangat mahal di memori dengan dijalankannya
method onCreateViewHolder(). Method onBindViewHolder() berperan sebagai method
yang akan menampilkan koleksi data dalam format tampilan yang ditentukan; baris per
baris jika pada bentuk list atau baris dan kolom pada bentuk grid. Hubungan antara satu
adapter dengan ViewHolder adalah satu ke banyak dengan artian satu kelas adapter bisa
memiliki lebih dari satu ViewHolder.
1. rvCategory.setHasFixedSize(true);
Menjelaskan bahwa jika kita set nilai true, RecyclerView secara otomatis dapat melakukan
optimasi untuk ukuran lebar dan tinggi RecyclerView adalah konstan.
Terlebih jika kita memiliki koleksi data yang dinamis untuk proses penambahan,
perpindahan, dan pengurangan item dari koleksi data.
Kita menggunakan library keren bernama Glide untuk menampilkan foto dari URL yang
diberikan secara asynchronous.
Pada sisi fleksibilitas, RecyclerView memiliki beragam bentuk yang disesuaikan dengan
design yang diinginkan, kita hanya perlu set nilai pada method setLayoutManager() saja
untuk menentukan bagaimana RecyclerView ditampilkan.
1. rvCategory.setLayoutManager(new LinearLayoutManager(this));
atau
Terakhir, untuk membuat kamu lebih paham tentang RecyclerView beberapa link di bawah
ini wajib kamu baca :
RecylerView
Using the RecyclerView
Fundamentals for ListView
RecyclerView Animator