Sebaiknya gunakan widget sebagai item di panel aplikasi untuk menyediakan fungsi penelusuran di aplikasi Anda. Seperti semua item di panel aplikasi, Anda dapat menentukan untuk ditampilkan setiap saat atau hanya saat ada ruang.SearchViewSearchView Anda juga dapat menentukannya sebagai tindakan yang dapat diciutkan, yang awalnya menampilkan SearchView sebagai ikon, lalu menggunakan seluruh panel aplikasi sebagai kolom penelusuran saat pengguna mengetuk ikon.
Menambahkan SearchView ke panel aplikasi
Untuk menambahkan widget SearchView ke panel aplikasi, buat file di project Anda yang bernama res/menu/options_menu.xml dan tambahkan kode berikut ke file tersebut. Kode ini menentukan cara membuat item penelusuran, seperti ikon yang akan digunakan dan judul item. Atribut collapseActionView memungkinkan SearchView Anda meluas untuk menggunakan seluruh panel aplikasi dan menciutkan kembali menjadi item panel aplikasi normal jika tidak digunakan. Karena ruang panel aplikasi terbatas di perangkat handset, sebaiknya gunakan atribut collapsibleActionView untuk memberikan pengalaman pengguna yang lebih baik.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu>
Jika Anda menginginkan ikon penelusuran yang lebih mudah diakses, buat file ic_search.xml di folder /res/drawable dan sertakan kode berikut di dalamnya:
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> </vector>
Untuk menampilkan SearchView di panel aplikasi, perluas resource menu XML res/menu/options_menu.xml dalam metode onCreateOptionsMenu() aktivitas Anda:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) return true }
Menjalankan aplikasi akan menghasilkan sesuatu seperti ini:
SearchView akan muncul di panel aplikasi dari aplikasi Anda, tetapi tidak akan berfungsi. Jika Anda mengetuk ikon penelusuran, Anda akan mendapatkan sesuatu seperti ini:
SearchView sedang beraksi.
Agar SearchView berfungsi, Anda harus menentukan cara SearchView berperilaku.
Membuat konfigurasi penelusuran
Konfigurasi penelusuran menentukan cara SearchView berperilaku dan
ditentukan dalam file res/xml/searchable.xml. Konfigurasi penelusuran
harus berisi, minimal, atribut android:label yang memiliki
nilai yang sama dengan atribut android:label dari elemen
<application>
atau <activity>
di manifes Android Anda. Namun, sebaiknya Anda juga menambahkan atribut android:hint untuk memberikan gambaran kepada pengguna tentang apa yang harus dimasukkan ke dalam kotak penelusuran.
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" />
Dalam file manifes aplikasi Anda, deklarasikan elemen
<meta-data>
yang mengarah ke file res/xml/searchable.xml. Deklarasikan elemen dalam <activity> tempat Anda ingin menampilkan
SearchView.
<activity android:name=".SearchResultsActivity" android:exported="false" android:label="@string/title_activity_search_results" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat.Light"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
Dalam metode onCreateOptionsMenu() yang Anda buat, kaitkan konfigurasi penelusuran dengan SearchView dengan memanggil setSearchableInfo(SearchableInfo):
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView val component = ComponentName(this, SearchResultsActivity::class.java) val searchableInfo = searchManager.getSearchableInfo(component) searchView.setSearchableInfo(searchableInfo) return true }
Panggilan ke
getSearchableInfo()
akan mendapatkan objek
SearchableInfo
yang dibuat dari file XML konfigurasi penelusuran. Saat konfigurasi penelusuran dikaitkan ke SearchView dengan benar dan pengguna mengirimkan kueri, SearchView akan memulai aktivitas dengan intent ACTION_SEARCH. Anda kemudian memerlukan aktivitas yang dapat memfilter intent ini dan menangani kueri penelusuran.
Membuat aktivitas yang dapat ditelusuri
Aktivitas yang dapat ditelusuri akan memfilter intent ACTION_SEARCH dan menelusuri kueri dalam set data. Untuk membuat aktivitas yang dapat ditelusuri, deklarasikan aktivitas pilihan Anda untuk memfilter intent ACTION_SEARCH:
<activity android:name=".SearchResultsActivity" ... > ... <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> ... </activity>
Dalam aktivitas Anda yang dapat ditelusuri, tangani intent ACTION_SEARCH dengan mencentangnya di metode onCreate() Anda.
Kotlin
class SearchResultsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search_results) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { val query = intent.getStringExtra(SearchManager.QUERY) Log.d("SEARCH", "Search query was: $query") } } }
Sekarang, SearchView dapat menerima kueri pengguna dan memulai aktivitas yang dapat ditelusuri dengan intent ACTION_SEARCH.
Setelah mendapatkan kueri penelusuran, Anda dapat meneruskannya ke ViewModel, tempat Anda dapat menggunakannya di lapisan lain arsitektur Anda untuk mengambil hasil penelusuran yang akan ditampilkan.