Modul Bab 3
Modul Bab 3
3.2. Tujuan:
1. Praktikan dapat memahami Android Lifecycle
2. Praktikan dapat memahami dan membuat UI Android menggunakan layout, text,
dan button
3. Praktikan dapat memahami dan mampu mengimplementasikan fragment di
aplikasi Android
3. Android Fragments
Android Fragment adalah sebuah bagian dari user interface di sebuah
FragmentActivity. Fragment dapat digunakan berkali-kali di activity yang berbeda.
Fragment dapat dibayangkan sebagai sebuah bagian activity yang bersifat
modular. Sebuah fragment harus berada di dalam sebuah activity. Karena,
lifecycle dari fragment dipengaruhi oleh lifecycle activity yang ditunggangi.
Sebagai contoh, ketika sebuah activity di-pause, maka semua fragment di
dalamnya akan ikut ter-pause. Tentu saja, seperti halnya pada activity, fragment
juga memiliki life cycle (yang tidak jauh berbeda).
3.5. Prosedur Praktikum:
1. Activity Lifecycle
1.1. onCreate()
onCreate(Bundle) merupakan sebuah method yang akan
menginisialisasi sebuah activity. Pada onCreate ini juga biasanya akan
dipanggil setContentView(int) untuk menyambungkan UI yang sudah dibuat,
kemudian menggunakan findViewById(int) untuk memanggil atau berinteraksi
dengan widget yang terletak pada UI tersebut. Berikut contoh syntax
onCreate():
1.2. onStart()
OnStart() merupakan method yang dipanggil saat aktivitas memasuki
status dimulai, dimana sudah terlihat aktivitas oleh pengguna yaitu pada saat
aplikasi mempersiapkan aktivitas untuk memasuki latar depan dan menjadi
interaktif atau dapat dikatakan sebagai tempat aplikasi menginisialisasi kode
yang mengelola UI. Saat aktivitas berpindah ke status dimulai, komponen
berbasis siklus proses apapun yang terkait dengan siklus proses aktivitas
akan menerima peristiwa ON_START. Method onStart() berjalan sangat
cepat, setelah callback ini selesai, aktivitas akan memasuki status dilanjutkan
atau memanggil method onResume().
1.3. onResume()
onResume() adalah method yang dipanggil saat berinteraksi dengan
pengguna. Activity akan tetap dalam onResume() sampai terjadi sesuatu
yang mengambil fokus aplikasi seperti menerima panggilan telepon,
pengguna beralih ke aktivitas lain, atau layar perangkat mati.
Saat aktivitas berpindah ke status dilanjutkan, maka akan menerima peristiwa
ON_RESUME. Di sinilah komponen siklus proses dapat mengaktifkan fungsi
apa pun yang perlu dijalankan saat komponen terlihat dan berada di latar
depan. Jika aktivitas dihentikan atau dijeda, maka akan masuk onPause()
dan ketika kembali method onResume() sekali lagi. Untuk alasan ini, Anda
harus menerapkan onResume() untuk menginisialisasi komponen yang dirilis
selama onPause(), dan melakukan inisialisasi lainnya yang harus terjadi
setiap kali aktivitas memasuki status dilanjutkan.
1.4. onPause()
State onPause() merupakan tempat terjadinya handling ketika
pengguna mem-pause interaksi dari activity. State ini terjadi jika ada activity
lain yang mengambil fokus, dan berada sebelum onResume() (jika nanti
melanjutkan penggunaan) atau onStop() (jika activity tidak digunakan lagi).
Perubahan yang dilakukan oleh pengguna di aplikasi harus di-commit ketika
titik ini dicapai. Di state ini, activity masih dapat dilihat di layar. Contoh
onPause adalah ketika aplikasi yang sedang dibuka, dan pengguna menekan
tombol “recent apps”. Kondisi activity pada keadaan ini dapat dikatakan
sudah memasuki onPause().
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Edit this text!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
1.5. onStop()
Callback onStop() merupakan handling dimana aktivitas pengguna
tidak lagi berinteraksi dengan aplikasi. Saat aktivitas beralih ke status
berhenti, maka siklus proses yang terkait dengan siklus proses aktivitas akan
menerima event ON_STOP. Pada event tersebut siklus proses dapat
menghentikan fungsi apa pun yang tidak perlu dijalankan saat komponen
tidak terlihat di layar. Biasanya callback tersebut akan dipanggil disaat
pengguna menekan tombol Home.
2. Layout
Layout menentukan struktur untuk antarmuka pengguna di aplikasi Anda,
seperti di dalam aktivitas. Semua elemen pada layout dibuat menggunakan hirarki
objek View dan ViewGroup. View biasanya menggambar sesuatu yang pengguna
bisa melihat dan berinteraksi dengannya. Sedangkan ViewGroup adalah container
yang tidak terlihat yang menentukan struktur layout untuk View dan objek
ViewGroup lainnya.
Objek View biasanya disebut "widget" dan dapat menjadi salah satu dari
banyak subclass, seperti Button atau TextView. Objek ViewGroup biasanya
disebut "layout" yang bisa menjadi salah satu dari banyak tipe yang menyediakan
struktur layout yang berbeda, seperti LinearLayout atau ConstraintLayout .
Untuk membuat layout baru yang memiliki root ConstraintLayout, Anda bisa:
a. menuju menu File>New>Layout Resource File
b. Isikan file name sesuai yang anda inginkan (hanya bisa a-z, 0-9, dan
underscore)
c. Untuk root element nya isikan
“androidx.constraintlayout.widget.ConstraintLayout”
d. Klik Finish
Untuk membuat layout baru yang memiliki root LinearLayout, Anda bisa:
a. menuju menu File>New>Layout Resource File
b. Isikan file name sesuai yang anda inginkan (hanya bisa a-z, 0-9, dan
underscore)
c. Untuk root element nya isikan “LinearLayout”
d. Klik Finish
c. Untuk mengubah lebar dari Button tersebut, dapat menuju Code/Split dan
ubah android:layout_width menjadi wrap_content
activity_main.xml
3.1. TextView
TextView adalah subkelas dari kelas View yang merupakan elemen
antarmuka pengguna yang berfungsi untuk menampilkan teks di layar. Anda
dapat mengontrol bagaimana teks muncul dengan atribut TextView pada file
layout XML. Penambahan TextView dapat dilakukan dengan cara drag and
drop dari menu Palette.
<TextView
android:id="@+id/txtWelcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Selamat Datang"
tools:layout_editor_absoluteX="156dp"
tools:layout_editor_absoluteY="356dp" />
activity_main.xml
<EditText
android:id="@+id/plain_text_input"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:inputType="text"/>
activity_main.xml
<EditText
android:id="@+id/txtWelcome"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:inputType="text"
android:text="Silahkan datang kembali"/>
4. Button
Button atau yang biasa dikenal sebagai tombol merupakan widget yang
biasanya memiliki fungsi untuk melakukan perintah tertentu. Button terdiri dari teks
dan icon. Untuk membuat widget button anda dapat membuka file
activity_main.xml dan tambahkan kode xml dibawah ini:
activity_main.xml
<Button
android:id="@+id/button1"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 1"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
<Button
android:id="@+id/button2"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 2"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
<Button
android:id="@+id/button3"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 3"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
<Button
android:id="@+id/button4"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 4"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
</LinearLayout>
Hasil :
Kemudian kustomisasi widget button dengan ikuti langkah dibawah ini dan
jalankan kode dibawah ini. Kemudian amati hasilnya dan tuliskan pada bagian
analisis.
colorbutton.xml
<solid android:color="#00CED1"/>
</shape>
shapecorner.xml
stroke.xml
gradient.xml
<corners android:radius="20dp"/>
</shape>
activity _main.xml
<Button
android:id="@+id/button1"
android:background="@drawable/colorbutton"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 1"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
<Button
android:id="@+id/button2"
android:background="@drawable/shapecorner"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 2"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
<Button
android:id="@+id/button3"
android:background="@drawable/stroke"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 3"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
<Button
android:id="@+id/button4"
android:background="@drawable/gradient"
android:layout_width="200dp"
android:layout_height="70dp"
android:text="CUSTOM 4"
android:textSize="20sp"
android:textColor="#ffff"
android:layout_margin="10dp"/>
</LinearLayout>
Hasil :
Dalam membuat button juga bisa melalui design, sehingga anda hanya
tinggal drop and drag, pilihan button yang tersedia juga banyak, seperti
ilustrasi dibawah ini:
ml version="1.0" encoding="utf-8"?>
<?x
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/androi
d"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:weightSum="1">
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="22dp"
android:background="#4CAF50"
android:drawableLeft="@drawable/pencil"
android:padding="16dp"
android:text="Button (Icon Kiri)"/>
<Button
android:id="@+id/button3"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="148dp"
android:layout_margin="16dp"
android:drawableBottom="@drawable/pencil"
android:padding="16dp"
android:text="Button (Icon Bawah)"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:weightSum="1">
<Button
android:id="@+id/button5"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="118dp"
android:layout_margin="16dp"
android:background="#CDDC39"
android:drawableTop="@drawable/pencil"
android:padding="24dp"
android:text="Button (Icon Atas)"
/>
<Button
android:id="@+id/button6"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="114dp"
android:layout_margin="16dp"
android:layout_weight="0.32"
android:drawableRight="@drawable/pencil"
android:paddingBottom="16dp"
android:text="Button (Icon Kanan)"/>
</LinearLayout>
</LinearLayout>
android:textStyle="bold" />
android:src="@drawable/beach" />
android:text="@string/next" />
android:background="#4E4B4F" />
android:inputType="textMultiLine
" />
</RadioGroup>
android:stepSize="0.5" />
android:textAppearance="?android
:textAppearanceSmall" />
android:progress="20" />
android:queryHint="@string/searc
h_photos" />
Progressbar <ProgressBar
android:id="@+id/loading_spinner
"
style="@style/Widget.AppCompat.P
rogressBar"
android:layout_width="wrap_conte
nt"
android:layout_height="wrap_cont
ent" />
5. Image
Image merupakan salah satu antarmuka yang berfungsi untuk menampilkan
gambar pada aplikasi android. Pada android studio terdapat dua komponen yang
berhubungan dengan image yaitu ImageView dan ImageButton. Berikut adalah
penjelasan lebih lanjut mengenai komponen tersebut.
5.1. ImageView
ImageView merupakan salah satu widget yang berfungsi untuk
menampilkan gambar berformat .png atau .jpg. Anda dapat menambahkan
ImageView pada activity atau halaman anda dengan drag & drop atau
dengan menuliskan kode pada file .xml. Anda dapat mengetikkan kode
berikut :
activity_main.xml
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@color/colorPrimary"
android:src="@mipmap/ic_launcher" />
</LinearLayout>
activity_main.xml
. . .
<ImageButton
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_below="@id/imageView"
android:src="@drawable/ic_baseline_image_search_24"
/>
. . .
6. Fragment
Fragment pada dasarnya mirip dengan activity. Namun, fragment memiliki
suatu tujuan spesifik di mana fragment dapat dipakai berulang-ulang di lebih dari
satu activity. Fragment juga dapat dikatakan sebagai sebuah bagian modular dari
suatu activity. Contoh implementasi fragment yang mungkin mudah dikenali
adalah penggunaan suatu navigation bar, di mana activity tidak berubah namun
layout yang tampil di layar dapat berubah (contohnya suatu aplikasi di mana ada
tombol Home, Profile, dan Timeline).
6.1. Implementasi fragment sederhana
Langkah pengerjaan:
<TextView
android:id="@+id/tv_frag_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment satu"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
3. Buatlah UI pada layout fragment pertama dengan nama
fragment_frag_sec.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FragSec">
<TextView
android:id="@+id/tv_frag_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment dua"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_counter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Counter Click"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_frag_two"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment 1"
app:layout_constraintEnd_toStartOf="@+id/btn_two"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment 2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/btn_one"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_one"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
import androidx.fragment.app.Fragment
displayView.findViewById<TextView>(R.id.tv_frag_two).tex
t = nilai.toString()
displayView.findViewById<Button>(R.id.btn_counter).setOn
ClickListener {
displayView.findViewById<TextView>(R.id.tv_frag_two).tex
t = nilai++.toString()
}
return displayView
}
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
supportFragmentManager.beginTransaction().apply {
replace(R.id.fragment_main, fragOne)
commit()
}
findViewById<Button>(R.id.btn_one).setOnClickListener {
supportFragmentManager.beginTransaction().apply {
replace(R.id.fragment_main, fragOne)
commit()
}
}
findViewById<Button>(R.id.btn_two).setOnClickListener {
supportFragmentManager.beginTransaction().apply {
replace(R.id.fragment_main, fragTwo)
commit()
}
}
}
}
3.8. Kesimpulan
Tuliskan kesimpulan dari percobaan diatas!
3.9. Tugas
1. Buatlah aplikasi Android yang dapat menampilkan setiap aktivitas siklus hidup
Android yang menerapkan onCreate, onStart, onRestart, onResume, onPause,
onStop, dan onDestroy.
2. Buatlah sebuah UI bertemakan biodata yang memuat minimal 1 layout, 2 tipe
text, dan 3 button.
3. Buatlah implementasi 2 fragment. Fragment pertama mengimplementasikan
imageview. Fragment kedua dapat berisi apapun sesuai kreativitas Anda
(sebagai contoh : form).
Daftar Pustaka