Android Intro
Tujuan khusus :
Siswa dapat :
Android adalah sebuah Operating System berbasis Linux dengan tatap muka bahasa
pemrograman Java untuk perangkat selular seperti smartphone seperti perangkat layar sentuh
yang mendukung OS Android dan termasuk perangkat Tablets. Android dikembangkan oleh
Open Handset Alliance (OHA), yang digawangi oleh Google Inc. OHA adalah himpunan beberapa
perusahaan seperti Samsung, Sony, Intel dan perusahaan lain yang menyediakan layanan serta
menggunakan handset untuk platform Android.
Pada tahun 2007, Google meluncurkan versi beta pertama dari Android Software
Development Kit atau yang dikenal dengan SDK. Setelahnya, tepatnya pada bulan September
2008, Google juga meluncurkan versi komersial pertama dari Android 1.0 yang diberi nama Alpha.
Pada tahun 2012, Google meluncurkan versi lain Android yakni Android 4.1 yang diberi
nama Android Jelly Bean. Android versi ini (Jelly Bean), merupakan versi Android dengan
pembaharuan tambahan dan memiliki banyak peningkatan dalam tatap muka, fungsionalitas dan
performanya.
Pada tahun 2014, Google meluncurkan versi terbaru Android mereka, yakni Android versi
5.0 yang diberi nama Lollipop. Pada Android Lollipop, Google benar-benar melakukan
perombakan pada bagian tatap muka dengan menggunakan desain Materials sangat baik untuk
tatap muka yang digunakan serta bagus untuk tema perangkat yang sedang terpasang.
Source code Android tersedia dan bisa didapatkan di Git-Hub, Stack overflow dan banyak situs
lainnya. Umumnya source code yang diluncurkan Google berada dibawah Lisensi Apache versi
2.0. Pada modul ini akan diajarkan pemrograman Android dengan bahasa Pemrograman Kotlin.
Merupakan Sistem Operasi open source dimana pengembang bisa melakukan kostumisasi
terhadap Sistem Operasinya sesuai dengan kebutuhan.
Mendukung konektifitas untuk GSM, CDMA, WIFI, NFC, Bluetooth, dll untuk telepon dan
transfer data. Hal ini mengizinkan seseorang untuk melakukan panggilan telepon masuk
dan keluar termasuk mengirimkan pesan singkat (SMS), serta mengizinkan seseorang
untuk mengirim dan mengambil data melalui jaringan mobile.
Denfan memanfaatkan teknologi WIFI, seseorang mampu terkoneksi dengan perangkat
lain hanya menggunakan sebuah aplikasi.
Android memiliki banyak API untuk mendukung layanan berbasis lokasi seperti GPS.
Seseorang dapat melakukan aktifitas terkait penyimpanan dengan menggunakan basis
data yang yang ringan yakni SQLite.
Android memiliki cangkupan media yang luas untuk mendukung media seperti AVI, MKV,
MPEG4, dll untuk memutar atau merekam beragam audio serta video, juga mendukung
beragam format gambar seperti JPEG, PNG, GIF, BMP, dll.
Android memiliki dukungan yang luas untuk perangkat keras pengontrol multimedia
untuk melakukan pemutaran atau pengrekaman menggunakan kamea dan microphone.
Memiliki tata letak webkit open source yang terintegrasi berbasis web browser untuk
mendukung HTML5, CSS3.
Mendukung multi-tasking, seseorang dapat berpindah dari satu layar perintah ke layar
perintah lainnya dan mendukung banyak aplikasi untuk berjalan secara bersamaan
(simultaneously).
Memungkinkan untuk penggunaan kembali komponen aplikasi dan mengganti aplikasi
asli.
Pengguna bisa mengakses komponen perangkat keras seperti kamera, GPS dan
Accelerometer.
Mendukung grafis 2D/3D.
1.3 Sejarah Perkembangan Android
Awalnya Google meluncurkan versi pertama dari platform Android di tanggal 5 November
2007, sejak saat itu Google merilis banyak versi Android dengan menggunakan kode nama
makanan penutup seperti Apple Pie, Banana Bread, Cupcake, Donut, Eclair, Froyo, Ginger Bread,
Jelly Beans, Kit Kat, Lollipop, Marsmallow, dll. Dan membuat banyak perubahan serta memberikan
penambahan pada platformnya.
Tabel berikut menampilkan detail versi dari Android yang diluncurkan oleh Google dari
tahun 2007 sampai sekarang :
Tabel 1.1 Perkembangan Versi Android
September 23,
Android 1.0 1 Apple Pie
2008
September 15,
Android 1.6 4 Donut
2009
Android 8.0 26 O
Untuk setiap versinya, Google membuat banyak perubahan dan memperkenalkan banyak
fitur baru demi mengikuti perkembangan seiring penggunaan Android yang semakin meningkat
dipasaran. Pada modul ini akan dibahas pemrograman pada Android menggunakan Kotlin. Kotlin
adalah sebuah Bahasa pemrograman yang berjalan dengan mesin virtual java ataupun
menggunakan kompiler LLVM yang dapat pula dikompilasikan dalam bentuk kode java.
Kotlin awalnya dikembangkan oleh JetBrains, perusahaan di balik inteliJ IDEA. JetBrains
merilis kotlin secara opensource dan kini perkembangannya semakin maju di tambah dengan
bantuan/support dari google.
Setelah melalui banyak perkembangan, JetBrains merilis Kotlin secara open source dan
kini setelah perkembangannya semakin maju, Google mendukung penuh Kotlin untuk
pengembangan aplikasi Android. Ini artinya Kotlin menjadi bahasa pemrograman ketiga yang
didukung oleh android selain Java dan C++.
BAB 2
Android Layout
Tujuan khusus :
Siswa dapat :
UI atau tatap muka pada Android merupakan komponen dari View yang bisa digunakan
untuk mendesain tatap muka/ User Interface (UI) dari sebuah aplikasi. Android sendiri memiliki
variasi UI yang sangat beragam seperti TextView, EditText, Buttons, Checkbox, Progressbar,
Spinners, dll.
Secara umum UI yang dibuat pada aplikasi Android menggunakan koleksi dari objek View
dan ViewGroup.
View merupakan kelas dasar/ base class dari semua komponen UI di Android, berguna
untuk membuat sebuah desain komponen UI yang interaktif seperti TextView, EditText, Checkbox,
Radio Button, dll. Dan bertugas untuk event handling dan menggambar.
Sedangkan ViewGroup merupakan subclass dari View dan bertindak sebagai kelas dasar
untuk layouts dan layout parameter. ViewGroup menyediakan sebuah kontainer yang tidak
terlihat untuk menampung Views atau ViewGroups yang lain, serta berfungsi untuk
mendefinisikan properti dari layout.
Pada pembutan aplikasi Android, kita bisa melakukan pendefinisian UI atau kontrol
masukan dengan dua cara, yaitu:
Di Android, kita bisa membuat sebuah layout seperti pembuatan halaman web di HTML
dengan menggunakan Views dan ViewGroups bawaan di XML file. File layout hanya boleh
berisikan satu root elemen yaitu objek View atau GroupView. Setelah kita mendefinisikan
root elemen, kita bisa menambahkan objek layout tambahan atau widgets sebagain
elemen anak untuk membangun hirarki View yang membentuk layout aplikasi yang kita
buat.
Berikut adalah contoh pembuatan kontrol UI seperti TextView, EditText dan Button di file
XML menggunakan LinearLayout. File yang kita gunakan adalah activity_main.xml.
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama" />
<EditText
android:id="@+id/nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"/>
<Button
android:id="@+id/getName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Simpan Nama" />
</LinearLayout>
Perlu diingat, pada Android, setiap kontrol masukan memiliki kumpulan event tertentu
dan events inilah yang akan muncul ketika pengguna aplikai kita melakukan sebuah aksi
tertentu sepeti memasukkan tulisan atau menyentuh sebuah tombol ( button).
Hal lain yang perlu diingat ketika membuat UI elemen di file XML adalah membuat file
layout UI tersebut di direktori /res/layout. Hanya file-file layout yang akan di kompail
sempurna pada direktori ini.
Setelah mendefinisikan layout di file XML, berikutnya kita akan memuat file layout XML
tersebut melalui Activity pada fungsi onCreate() seperti berikut:
Perhatikan baris kode diatas, pada baris kode terlihat bahwa kita melakukan pemanggilan
terhadap layout yang telah kita definisikan di file XML menggunakan fungsi
setContentView dalam format R.layout.layout_file_name. Karena nama file XML yang
kita buat/ gunakan adalah main_activity.xml, maka nama file yang kita gunakan adalah
R.layout.activity_main.
Secara umum, selama menjalankan activity, fungsi onCreate() akan dipanggil oleh
kerangka kerja Android untuk mengembalikan layout yang diharapkan untuk sebuah
activity. Activity sendiri adalah tampilan satu layar dengan UI dari aplikasi yang kita
bangun, activity ini akan bertindak sebagai titik masukan untuk pengguna agar bisa
berinteraksi dengan aplikasi yang kita buat.
Aplikasi Android secara umum terdiri dari beberapa layar yang setiap layar tersebut
merupakan turunan dari kelas Activity. Dengan memanfaatkan activites, kita bisa
meletakkan semua komponen UI aplikasi android yang kita bangun dalam satu layar. Salah
satu acitivity dari banyak activity yang ada bisa kita tandai sebagai main activity yang
merupakan layar pertama yang akan muncul saat aplikasi dijalankan.
Jika kita ingin membuat elemen UI di runtime, kita perlu membuat objek View dan Gorup
View kostumisasi kita sendiri dengan mengetikkan baris kodenya untuk mendapatkan
layout yang diharapkan.
Berikut contoh pembuatan elemen UI seperti TextView, EditText dan Button di
LinearLayout menggunakan kostumisasi objek View dan ViewGroup di sebuah activity
secara terprogram.
Dengan membuat kostumisasi View dan ViewGroup sedara terprogram, kita bisa
mendefinisikan kontrol UI di layout berdasarkan kebutuhan di aplikasi Android yang kita bangun.
Ketika mendefinisikan kontrol UI di layout menggunakan file XML, kita perlu menentukan
lebar dan tinggi untuk setiap elemen View dan ViewGroup menggunakan atribut layout_width
dan layout_height. Berikut adalah contoh untuk mengatur lebar dan tinggi untuk elemen View
dan ViewGroup di file layout XML.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content" Jika
android:text="Nama" />
diperhatikan,
pada </LinearLayout> baris koding
diatas, kita
menggunakan nilai yang berbeda untuk mengatur layout_width dan layout_height. Pada contoh
diatas kita menggunakan match_parent dan wrap_content.
Jika kita mengatur match_parent, maka View dan ViewGroup akan mencoba untuk
menyocokkan lebar dan tinggi dengan parent dari layout. Begitupun jika kita mengatur
wrap_content, maka View dan ViewGroup akan mencoba untuk menyesuaikan lebar dan tinggi
berdasarkan konten nantinya.
2.1.1 LinearLayout
Pada Aplikasi Android, LinearLayout adalah subclass dari ViewGroup yang digunakan
untuk memberikan semua instance turunan View satu persatu, baik dalam bentuk Horizontal
maupun Vertikal tergantung properti atribut android:orientation di file layout XML.
Di LinearLayout, contoh/ instances dari turunan View diatur satu persatu, sehingga untuk
bentuk Horizontal akan memiliki satu baris dengan beberapa kolom, sebaliknya bentuk Vertikal
akan memiliki satu kolo, dengan beberapa baris.
a. Membuat LinearLayout
Buatlah sebuah file layout XML baru dengan nama activity_linearlayout.xml, lalu isikan
baris koding berikut:
Tampilan diatas menunjukkan tiga buah kontrol yakni TextView yang disusun dalam LinearLayout.
2.1.2 RelativeLayout
Layout berikutnya adalah RelativeLayout yang digunakan untuk menentukan posisi setiap
kontrol realtif satu sama lain, misalkan posisi kontrol A berada di sebelah kiri kontrol B. Secara
bawaan, turunan View diposisikan di bagian atas kiri dari layout.
Attribute Description
a. Membuat RelativeLayout
Buatlah sebuah file layout XML baru dengan nama activity_relativelayout.xml, lalu isikan
baris koding berikut:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Tombol Satu" />
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="Tombol Dua" />
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
Pada baris koding diatas, dapat dilihat pada kontrol btn_2 kita mengatur
android:layout_centerVertical="true"
android:text="Tombol Tiga" />
<Button
android:id="@+id/btn_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Tombol Empat" />
<Button
android:id="@+id/btn_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/btn_2"
android:layout_centerHorizontal="true"
android:text="Tombol Lima" />
<Button
android:id="@+id/btn_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/btn_4"
android:layout_centerHorizontal="true"
android:text="Tombol Enam" />
<Button
android:id="@+id/btn_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/btn_1"
android:layout_toRightOf="@+id/btn_1"
android:layout_alignParentRight="true"
android:text="Tombol Tujuh" />
</RelativeLayout>
Sedikit berbeda, untuk bnt_5, kita mengatur posisinya mengikuti btn_2, sehigga saat kita
atur di atribut android:layout_alignBottom=”@+id/btn_2”, posisi bawah yang menjadi rujukan
adalah posisi dari btn_2, lalu kita atur atribut android:layout_centerHorizontal=”true” yang
artinya posisi btn_5 berda di tengah-tengah secara Horizontal.
Selanjutnya isikan baris kodingan berikut pada kelas Activity yang telah dibuat sebelumnya.
class ContohRelativeLayout:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_relativelayout)
}
}
Pada aplikasi Android, TableLayout merupakan subclass dari ViewGroup yang digunakan
untuk menampilkan turunan dari View berupa baris dan kolom.
TableLayout mempisisikan turunannya dalam baris dan kolom dan tidak akan
menampilkan border lines untuk baris, kolom maupun cells. Di Android, TableLayout bekerja
seperti halnya tabel HTML, untuk mendefinisikan TableLayout dengan tag <table> dan untuk
TableRow bisa menggunakan tag <tr>.
a. Membuat TableLayout
Buatlah sebuah kelas Activity baru dengan nama ContohTableLayout, setelahnya buatlah
sebuah layout XML dengan nama activity_tablelayout.xml. Isikan baris koding berikut ke file
layout XML yang baru dibuat.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="100dp"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TableRow android:background="#0079D6" android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="No"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Judul"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Kategori"/>
</TableRow>
<TableRow android:background="#DAE8FC" android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Pengkhianatan Seorang Bestie"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Novel"/>
</TableRow>
<TableRow android:background="#DAE8FC" android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Python for Newbie"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Buku Referensi"/>
</TableRow>
<TableRow android:background="#DAE8FC" android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Design UI UX for E-Learning"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Jurnal"/>
</TableRow>
</TableLayout>
Selanjutnya agar aplikasi kita menampilkan layout yang telah kita atur, isikan baris koding
berikut di kelas Activity yang telah dibuat.
FrameLayout adalah sebuah subclass ViewGroup yang digunakan untuk mengspesifikasikan posisi
dari contoh View. Secara sederhana, FrameLayout berguna untuk mengunci sebuah area layar
agar tampil dalam satu item saja.
a. Membuat FrameLayout
Buatlah sebuah kelas baru dan beri nama ContohFrameLayout, setelahnya buatlah
sebuah file layout XML baru dengan nama activity_framelayout.xml, isikan baris koding
berikut:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/img_BG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/book"/>
<TextView
android:id="@+id/txt_View1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:background="#4C374A"
android:padding="10dp"
android:text="Perpustakaan Kita"
android:textColor="#FFFFFF"
android:textSize="20sp"/>
<TextView
android:id="@+id/txt_View2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|bottom"
android:background="#AA000000"
android:padding="10dp"
android:text="21/Aug/2017"
android:textColor="#FFFFFF"
android:textSize="18sp"/>
</FrameLayout>
Pada baris koding diatas, kita menggunakan sebuah foto untuk menjadi background
tampilan bernama book.jpeg yang diletakkan di folder drawable lalu dipanggil menggunakan
atribut android:src=”@drawable/book”, kita menggunakan ImageView untuk menampilkan
gambar ini.
Untuk melihat hasil tampilan, isikan baris koding berikut di kelas Activity yang telah dibuat
sebelumnya.
class ContohFrameLayout:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_framelayout)
}
}
Berikutnya kita akan membahas ListView yang juga merupakan sebuah ViewGroup dan
digunakan untuk menampilkan sebuah daftar yang bisa di scroll dan terdiri dari baris-baris item.
Untuk mengisikan baris data kedalam daftar, kita menggunakan data adapter yang menarik data
dari sumber data seperti sebuah array atau database lalu mengkonversinya kedalam sebuah result
view untuk diletakkan kedalam daftar.
Di Android sendiri, Adapter akan berlaku sebagai sebuah perantara antara sumber data view dari
adapter seperti ListView dan GridView untuk memasukka data kedalam view adapter.
Adapter Description
a. Membuat ListView
Buatlah sebuah kelas Activity baru dengan nama ContohListView, berikutnya buatlah
sebuah layout XML baru dengan nama activity_listview.xml dan isikan baris koding
berikut.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/lv_anggota"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
Pada baris kodingan diatas, kita membuat sebuah ListView dengan memberinya id
lv_anggota untuk menampilkan daftar anggota dari perpustakaan kita.Setelahnya, isikan baris
koding berikut pada kelas Activity yang telah dibuat.
class ContohListView:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_listview)
val anggota = arrayOf(
"Tomoyo Tomodachi",
"Zayn Malik",
"Zendaya",
"Cara Delevingne",
"Miley Cyrus",
"Zara Larson"
)
val adapter = ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_activated_1, anggota
Jika diperhatikan pada kodingan diatas, kita membuat sebuah array bernama anggota
yang berisikan data anggota perpustakaan kita. Kemudian, kita membuat sebuah objek adapter
untuk membaca array anggota yang telah kita buat, objek adapter ini yang akan berlaku sebagai
perantara antara sumber data kita yang berupa array ke view dari adapter yakni lv_anggota.
Berikut hasil tampilan program setelah dijalankan.
Pada langkah sebelumnya kita telah membuat cara sederhana untuk melakukan bind data
ke ListView menggunakan array. Selanjutnya kita akan membuat sebuah ListView dengan adapter
yang dikostumisasi. Untuk membuat kostumisasi adapter, kita perlu melakukan extend dari kelas
BaseAdapter dan membuat sebuah kelas yang akan menampung sebuah parameter untuk baris
item.
Lakukan modifikasi pada file layout XML yang telah dibuat sebelumya, yakni
activity_listview.xml, isikan baris koding berikut.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv_anggota"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp" />
</LinearLayout>
Berikutnya, kita akan membuat sebuah layout untuk item baris dari ListView,
buatlah sebuah layout XML baru dengan nama list_row.xml, lalu inikan baris kodingan
berikut.
Buatlah sebuah kelas Activity baru dengan nama ContohListItem, lalu isikan baris
kodingan berikut.
class ContohListItem {
var nama: String = ""
var status: String = ""
var panggilan: String = ""
Method Description
Pada potongan koding diatas, kita memberikan nilai parameter berupa variabel bertipe
Activity dengan nama activity dan sebuah variabel bertipe ArrayList bertipe generic bernama
items.
Variabel activity berguna sebagai objek kelas Activity untuk mengatur layout yang akan
di tampilkand alam aplikasi saat dijalankan, sedangkan variabel items merupakan objek dari
ArrayList generic yang menampung data koleksi dari kelas ContohListItem dimana kita telah
mendeklarasikan variabel penampung nilai yang akan ditampilkan di View.
init {
this.txtNama = row?.findViewById<TextView>(R.id.txt_Nama)
this.txtStatus = row?.findViewById<TextView>(R.id.txt_Status)
this.txtPanggilan = row?.findViewById<TextView>(R.id.txt_Panggilan)
}
}
Pada baris kodingan diatas, kita membuat sebuah ViewHolder, yakni sebuah pola
desain yang digunakan untuk menampung View dari sebuah aplikasi Android, fungsinya
adalah untuk mempercepat rendering/ pemberian nilai pada View. Pada contoh diatas, kita
membuat ViewHolder untuk rendering nilai pada View txt_Nama, txt_Status dan txt_Panggilan.
Baris kodingan diatas merupakan fungsi override dari kelas BaseAdapter yang telah
dijelaskan sebelumnya dalam tabel. Kita akan melakukan pengaturan pada masing-masing fungsi
seperti fungsi getItem() yang akan mendapatkan objek data masing-masing baris di ListView,
fungsi getItemId() untuk mendapatykan id dari objek yang dipilih dimana nilai id yang berupa
String akan di konversikan ke nilai angka bertipe Long, fungsi getCount() untuk mengembalikan
jumlah total baris yang ada di Listview.
Terakhir ada fungsi getView() untuk mengembalikan View dalam satu baris dari ListView.
Untuk fungsi getView(), kita akan menambahkan parameter position: Int untuk menampung
posisi Item yang dipilih di ListView nantinya, penggunaannya terdapat pada baris:
Berikutnya terdapat parameter convertView, yakni sebuah cara dari kelas Adapter
untuk menggunakan kembali View yang telah ada sebelumnya, convertView akan
mengecek nilai View sebelumnya, jika tidak didapati nilai kembalian, maka akan dibuat
sebuah View baru, proses pengecekkannya terdapat pada baris:
if (convertView == null) {
val inflater =
activity?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
view = inflater.inflate(R.layout.list_row, null)
viewHolder = ViewHolder(view)
view?.tag = viewHolder
} else {
view = convertView
viewHolder = view.tag as ViewHolder
}
Parameter terakhir adalah parent: ViewGroup untuk melakukan override kelas ViewGroup.
package com.example.aplikasikontrol
import android.app.Activity
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
package com.example.aplikasikontrol
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.AdapterView
import android.widget.ListView
Pada baris kodingan diatas, kita membuat sebuah array bernama anggota yang
menampung nilai anggota terdaftar di Perpustakaan Kita. Selanjutnya pada fungsi override
onCreate(), kita membuat sebuah objek bernama adapter dari kelas ContohCustomAdapter,
dimana nilai yang akan diolah oleh kelas ContohCustomAdapter berasaldari nilai yang
dimasukkan pada fungsi getDataAnggota() yang selanjutnya akan ditampung oleh objek
listView untuk ditampilkan ke lv_anggota.
Pada saat salah satu baris dari daftar ListView diklik oleh pengguna, maka akan muncul
sebuah pesan singkat yang kita atur menggunakan Toast, pesan ini berisikan nomor urut anggota
dan nama anggota.
Untuk fungsi getDataAnggota() sendiri kita deklarasikan sebagai fungsi bertipe ArrayList
generic yang menampung koleksi data dari kelas ContohListItem, fungsi ini akan memberikan
nilai pada masing-masing variabel yang telah kita deklarasikan di dalam kelas ContohListItem agar
bisa di proses oleh fungsi setter dan getter.
Agar pemberian nilai sesuai dengan yang diharapkan, kita melakukan perulangan untuk
memberikan nilai ke variabel di kelas ContohListItem sebanyak data yang ada di array anggota.
Selanjutnya kita membuat sebuah variabel objek bernama agt dari kelas ContohListItem lalu
memberikan nilai pada variabel objek tersebut sebagai parameter yang akan diangkut ke kelas
ContohListItem, parameternya antara lain berisikan Nama Anggota, Status Anggota dan
Panggilan Anggota.
Terakhir, setelah nilai diberikan, kita akan melakukan binding data kedalam sebuah
variabel objek bernama hasil yang juga merupakan variabel objek dari ArrayList generic dari kelas
ContohListItem. Proses binding ini dilakukan pada baris program hasil.add(agt).
2.1.6 GridView
GridView adalah sebuah ViewGroup yang digunakan untuk menampilkan item-item dalam
dua dimensi yang bisa di scroll. Item dari grid secara otomatis dimasukkan kedalam layout
gridview mengguakan list adapter.
Secara umum, adapater akan menarik data dari sumber data seperti sebuah array atau
database lalu mengkonversinya kedalam sebuah result view untuk diletakkan kedalam view.
a. Membuat GridView
Buatlah sebuah layout XML baru dengan nama activity_gridview, lalu isikan baris koding
berikut.
Berikutnya kita akan membuat sebuah kelas yang akan berlaku seperti halnya
sebuah kelas Model untuk menampung fungsi setter dan getter, nama kelas Activity ini
kita beri ContohItemFoto.java, berikut baris kodingannya.
package com.example.aplikasikontrol
class ContohItemFoto {
var judul : String? = null
var penulis : String? = null
var desc : String? = null
var foto: Int? =null
}
Selanjutnya, kita akan membuat sebuah adapter kostumisasi, berilah nama ContohAdapterFoto
yang meng-extends kelas BaseAdapter untuk menampilkan semua item di grid.Berikut baris
koding untuk kelas ContohAdapterFoto.java:
package com.example.aplikasikontrol
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
init {
this.lblJudul = row?.findViewById<TextView>(R.id.lbl_Judul)
this.lblPenulis = row?.findViewById<TextView>(R.id.lbl_Penulis)
this.imgCover = row?.findViewById<ImageView>(R.id.img_Cover)
}
}
override fun getView(position: Int, convertView: View?, parent:
ViewGroup?): View {
val view: View
this.context = context
val image = this.items[position]
val viewHolder: ViewHolder
if (convertView == null) {
val inflater =
activity?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
view = inflater.inflate(R.layout.activity_listbuku, null)
viewHolder = ViewHolder(view)
view.tag = viewHolder
} else {
view = convertView
viewHolder = view.tag as ViewHolder
}
var buku = items[position]
viewHolder.lblJudul?.text = buku.judul
viewHolder.lblPenulis?.text = buku.penulis
viewHolder.imgCover?.setImageResource(buku.foto!!)
}
artinya kita memanggil fungsi setImageResource untuk menentukan foto yang akan
dibaca program berada atau disimpan di variabel mana.
Pada kasus diatas, imgCover adalah sebuah variabel bertipe ImageView yang menjadi
variabel dari kontrol ImageView img_Cover. Untuk nilai yang ditampilkan dalam kontrol ini adalah
nilai dari objek buku yang merujuk pada variabel foto, terlihat pada bagian buku.foto!!, yang
artinya kita menggunakan fungsi getter pada program Java umumnya. Tanda “!!” adalah sebuah
tanda untuk memastikan nilai tidaklah kosong.
Selanjutnya, kita akan membuat sebuah layout XML baru yang akan menjadi komponen
isi dalam GridvView yang kita buat sebelumnya, untuk itu buatlah sebuah layout XML dengan
nama activity_listbuku.xml lalu isikan baris koding berikut.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="#b2dbb2"
android:padding="10dp">
<ImageView
android:layout_width="80dp"
android:layout_height="120dp"
android:id="@+id/img_Cover"
android:layout_centerHorizontal="true"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rl_content"
android:layout_below="@+id/img_Cover">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lbl_Judul"
android:textStyle="bold|italic"
android:textSize="18sp"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lbl_Penulis"
android:textStyle="bold"
android:layout_below="@+id/lbl_Judul"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
</RelativeLayout>
Setelah membuat layout XML yang dibutuhkan, langkah selanjutnya adalah membuat
kelas Activity utama untuk memanggil layout activity_gridview.xml yang akan menampilkan
data dalam layout activity_listbuku.xml. Kelas ini akan memanggil kelas ContohAdapterFoto
agar setiap komponen yang ada di dalam layout activity_listbuku.xml berisikan data sesuai
dengan kebutuhan.
Kelas Activity utama yang akan kita buat adalah ContohGridView, lalu isikan baris koding
berikut.
package com.example.aplikasikontrol
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_gridview.*
buku = ContohItemFoto()
buku.judul = "Python for Baby"
buku.penulis = "Tyo"
buku.foto = R.drawable.python
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
buku.judul = "Android Kotlin"
buku.penulis = "Toma"
buku.foto = R.drawable.kotlin
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
Pada baris koding diatas, penjelasannya juga sama dengan layout sebelumnya,
yang berbeda disini terletak pada baris:
gv_Buku.setOnItemClickListener { _, _, i, _ ->
val intent: Intent = Intent(applicationContext,
ContohFullFoto::class.java)
intent.putExtra("image", listBuku.get(i).foto)
intent.putExtra("judul", listBuku.get(i).judul)
intent.putExtra("penulis", listBuku.get(i).penulis)
intent.putExtra("desc", listBuku.get(i).desc)
startActivity(intent)
}
buku = ContohItemFoto()
buku.judul = "UI UX for E-Learning"
buku.penulis = "Afril"
buku.foto = R.drawable.uiux
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
buku.judul = "Robot Petak"
buku.penulis = "Toma"
buku.foto = R.drawable.robot
buku.desc = ""
result.add(buku)
return result
}
}
Pada bagian koding diatas, kita membuat sebuah fungsi yang akan membaca aksi dari
pengguna berupa sentuhan atau klik di GridView yang telah dibuat. Fungsi
setOnItemClickListener adalah fungsi yang membaca aksi pengguna saat meng klik salah satu
item yang muncul di GridView.
Parameter Keterangan
parent AdapterView: The AdapterView where the click happened.
view View: The view within the AdapterView that was clicked (this
will be a view provided by the adapter)
position int: The position of the view in the adapter.
id long: The row id of the item that was clicked.
Selain itu, yang berbeda berikutnya adalah cara kita mengatur nilai masing-masing
variabel yanga da di kelas Activity ContohItemFoto.java, yang mana pada contoh sebelumnya
kita menggunakan fungsi adapter = ContohCustomAdapter(this, getDataAnggota()), untuk
memproses pemberian nilai disebuah fungsi bernama getDataAnggota(). Fungsi tersebut akan
melakukan perulangan untuk mengambuil nilai array anggota yang telah kita deklarasikan
sebelumnya.
Kali ini, kita tidak menggunakan array, kita langsung memberikan nilai masing-masing
atribut/ variabel didalam fungsi yang bernama generateDataBuku(), seperti berikut:
buku = ContohItemFoto()
buku.judul = "IoT and Industry 4.0"
buku.penulis = "Mhd. Khalif"
buku.foto = R.drawable.iot
buku.desc = ""
result.add(buku)
buku = ContohItemFoto()
buku.judul = "UI UX for E-Learning"
buku.penulis = "Afril"
buku.foto = R.drawable.uiux
buku.desc = ""
result.add(buku)
return result
Pada bagian baris koding diatas, kita membuat sebuah variabel objek bernama result yang
bertipe data ArrayList generic dengan merujuk pada data di kelas ContohItemBuku. Objek ini akan
menampung data yang kita atur berikutnya untuk dikirim ke kelas ContohItemFoto untuk proses
selanjutnya melalui kelas adapter.
Sedangkan variabel buku, kita gunakan untuk mengatur nilai yang akan di tampung
variabel result, variabel ini akan memanggil masing-masing variabel yang ada di kelas
ContohItemBuku satu-persatu sesuai kebutuhan, untuk diberikan nilai. Selanjutnya, variabel
buku akan diproses kelas adapter untuk di assign ke masing-masing variabel di kelas
ContohItemBuku melalui objek result dengan fungsi result.add(buku).
Untuk membaca foto, silahkan masukkan foto kedalam folder drawable lalu panggil
menggunakan fungsi R.drawable.<nama_foto_di_drawable_folder>.
Notes: untuk memunculkan gambar cover buku, silahkan isikan gambar di folder drawabel dalam path /res
Berikutya kita akan membuat GridView yang tampil lebih interaktif, saat sebuah buku di
klik oleh pengguna, kita akan menampilkan detail deskripsi dari buku, untuk itu kita perlu
membuat sebuah GridView baru yang akan menampung komponen tunggal dari buku yang
dipilih pengguna, lengkap dengan komponen lain seperti judul, penulis serta deskripsi buku.
Buatlah sebuah file layout XML baru dengan nama activity_detailbuku, lalu isikan baris
kodingan berikut.
package com.example.aplikasikontrol
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_detailbuku.*
Terakhir, kita akan membahas WebView, yakni sebuah extention dari View yang digunakan
untuk menampilkan halaman HTML static atau melakukan remote halaman web dengan URL di
aplikasi Android.
Secara umum, WebView di Android akan berlaku sebagai browser yang tertanam untuk
menampilkan halaman web di layout activity dan tidak memiliki fitur-fitur normal yang ada pada
sebuah browser seperti address bar, kontrol navigasi, dll.
a. Android WebView Example
Buatlah sebuah layout XML baru dengan nama activity_webview.xml, isikan baris koding
berikut.
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Berikutnya buatlah sebuah kelas Activity baru dengan nama ContohWebView lalu isikan
baris koding berikut.
Kita akan menggunakan atribut LoadURL untuk melakukan remote terhadap konten URL
melalui aplikasi Android.
Buatlah kelas Activity baru dengan nama ContohWebViewURL, isikan baris koding
berikut.
class ContohWebViewURL : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_webview)
wv_URLCCIT.settings.javaScriptEnabled = true
wv_URLCCIT.loadUrl("https://ccit.eng.ui.ac.id/")
}
}
Pada baris koding diatas, kita menambahkan fungsi settings.javaScriptEnabled=true
agar aplikasi Android kita mengenali sintaks JavaScript yag ada di Web URL yang akan kita
panggil. Setelahnya masukkan dalam fungsi loadUrl alamat URL yang akan ditampilkan.
Latihan:
1. Buatlah sebuah aplikasi sederhana dengan memanfaatkan layout yang telah diajarkan
sebelumnya.
2. Tampilan awal aplikasi berupa gridview yang menampikan menu data-data buku.
3. Menu dalam gridview akan menampilkan menu dari layout lain saat pengguna melakukan
aksi klik.
4. Misal, menu GridView terdiri dari: Data Buku Tabel, Data Buku ListView, dll. Saat
pengguna memilih salah satu item di GridView tersebut, misalkan Data Buku Tabel, maka
akan muncul LayoutTabel dengan data buku dummy.
5. Terakhir, tambahkan menu untuk menampilkan sebuah halaman web, kita misalkan
halaman web dari Perpustakaan Kita.