Sub CPMK :
- Mahasiswa dapat menambahkan Option Menu pada ActionBar
- Mahasiswa dapat memberikan aksi pada Option Menu yang dipilih
- Mahasiswa dapat menambahkan SeachView pada ActionBar
Alat dan Bahan :
- Laptop atau PC dengan Spesifikasi Prosesor minimal Corei5 dan RAM 8 GB
- Android Studio
- Android Device
Langkah Praktikum
- Buat project baru di android studio, dengan kriteria sebagai berikut :
Nama Project | BelajarActionBar |
Target & Minimal SDK | Phone and Tablet, API Level 21 |
Tipe Activity | Empty Activity |
Language | Kotlin |
- Tambahkanlah FrameLayout pada main_activity.xml, sehingga menjadi seperti berikut:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <FrameLayout android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/fragment_container" /> </RelativeLayout>
- Setelah itu buatlah berkas xml baru pada directory menu dengan nama berkas option_menu.xml.
Cara membuat menu baru yaitu klik kanan pada res → new → Android resource file. Ganti nama berkas dan directory seperti gambar berikut:
Sehingga akan muncul file baru pada folder menu seperti ini:
Kondisikan option_menu.xml menjadi seperti berikut :
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <group android:menuCategory="container"> <item android:id="@+id/menu1" android:title="@string/menu_1" android:icon = "@drawable/ic_announcement_white_24" app:showAsAction="always" /> <item android:id="@+id/menu2" android:title="@string/menu_2" /> </group> </menu>
Kita bisa mengunduh icon di tautan https://material.io/tools/icons/?icon=announcement&style=baseline atau dengan cara klik kanan pada folder drawable → New → Vector Asset → Pada Clipart cari “announcement” → Ganti Color jadi putih → Next → Finish.
- Ada bagian yang merah pada @string/menu_1 dan @string/menu_2. Untuk memperbaikinya, kita hanya perlu menambahkan resource string. Tambahkan kumpulan resource string di dalam strings.xml.
<resources> <string name="app_name">Belajar Action Bar</string> <string name="hello_blank_fragment">Hello blank fragment</string> <string name="this_activity">Ini adalah menu activity</string> <string name="this_fragment">Ini adalah menu fragment</string> <string name="search">Search</string> <string name="menu_1">Menu 1</string> <string name="menu_2">Menu 2</string> </resources>
- Kemudian buatlah 1 Activity baru dan 1 Fragment baru dengan nama MenuActivity dan MenuFragment. Kemudian tambahkan textview di MenuActivity.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_menu" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MenuActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/this_activity" /> </RelativeLayout>
- Begitu juga dengan layout dari MenuFragment. Tambahkan sebuah textview sehingga isinya menjadi seperti berikut:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context=".MenuFragment"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/this_fragment" /> </RelativeLayout>
- Sebelum masuk ke kode kotlin, kita tambahkan dulu library View Binding. Caranya buka build.gradle di level module, kemudian tambahkan kode berikut.
android { ... buildFeatures { viewBinding true } }
Setelah itu lakukan sinkronisasi project. Maka secara otomatis akan terbentuk kelas yang menampung semua id yang di dalam layout XML.
- Setelah itu tambahkan beberapa baris kode pada metode onCreateOptionsMenu() dan onOptionsItemSelected() pada MainActivity, sehingga menjadi seperti berikut:
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } override fun onCreateOptionsMenu(menu: Menu): Boolean { val inflater = menuInflater inflater.inflate(R.menu.option_menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu1 -> { supportFragmentManager.beginTransaction() .replace(R.id.fragment_container, MenuFragment()) .addToBackStack(null) .commit() return true } R.id.menu2 -> { val i = Intent(this, MenuActivity::class.java) startActivity(i) return true } else -> return true } } }
- Setelah selesai silakan jalankan aplikasi. Tampilannya kurang lebih akan menjadi seperti gambar di bawah ini :
SearchView Pada ActionBar
- Sebelum menambahkan SearchView pada ActionBar, terlebih dahulu kita tambahkan icon search. Caranya klik klik kanan pada folder drawable→ new → Vector Asset. Kemudian klik pada Clip Art dan cari icon dengan keyword “search“.
- Kemudian ganti nama menjadi ic_baseline_search_white_24 dan warna menjadi putih (FFFFFF) seperti ini:
- Nah, langkah selanjutnya tambahkan SearchView pada action bar. Untuk menggunakan widget searchview, tambahkan kode ini pada menu option_menu.xml.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/search" android:icon="@drawable/ic_search_white_24" android:title="@string/search" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="collapseActionView|ifRoom" /> <group android:menuCategory="container"> <item android:id="@+id/menu1" android:title="@string/menu_1" android:icon = "@drawable/ic_announcement_white_24" app:showAsAction="always" /> <item android:id="@+id/menu2" android:title="@string/menu_2" /> </group> </menu>
- Kemudian kita pasang listener searchview pada MainActivity. Caranya dengan menambahkan beberapa baris pada metode onCreateOptionsMenu(). Pastikan juga bahwa SearchView yang dipilih di-import dari androidx.appcompat.widget.SearchView.
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)) searchView.queryHint = resources.getString(R.string.search_hint) searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { Toast.makeText(this@MainActivity, query, Toast.LENGTH_SHORT).show() return true } override fun onQueryTextChange(newText: String): Boolean { return false } })
Sehingga metode onCreateOptionsMenu() menjadi seperti berikut:
override fun onCreateOptionsMenu(menu: Menu): Boolean { val inflater = menuInflater inflater.inflate(R.menu.option_menu, menu) val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)) searchView.queryHint = resources.getString(R.string.search_hint) searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { /* Gunakan method ini ketika search selesai atau OK */ override fun onQueryTextSubmit(query: String): Boolean { Toast.makeText(this@MainActivity, query, Toast.LENGTH_SHORT).show() return true } /* Gunakan method ini untuk merespon tiap perubahan huruf pada searchView */ override fun onQueryTextChange(newText: String): Boolean { return false } }) return true }
5. Yang terakhir adalah tambahkan string search_hint pada res → values → strings.xml seperti di bawah ini
<string name="search_hint">Masukkan kata</string>
6. Silahkan jalankan aplikasinya