Sebaiknya gunakan
SearchView
sebagai item di panel aplikasi untuk menyediakan fungsi penelusuran di aplikasi Anda. Sebagai
dengan semua item di panel aplikasi, Anda dapat menentukan SearchView
untuk
ditampilkan setiap saat atau hanya ketika tersedia ruang. Anda juga dapat mendefinisikannya sebagai
tindakan yang dapat diciutkan, yang menampilkan SearchView
sebagai ikon
awalnya dan kemudian menggunakan seluruh bilah
aplikasi sebagai {i>field<i} pencarian ketika pengguna
mengetuk ikon.
Menambahkan SearchView ke panel aplikasi
Untuk menambahkan widget SearchView
ke panel aplikasi, buat file di
project bernama res/menu/options_menu.xml
dan tambahkan kode berikut
ke file. Kode ini menentukan cara membuat item penelusuran, seperti ikon
digunakan dan judul item. Atribut collapseActionView
memungkinkan SearchView
Anda meluas untuk mengisi seluruh panel aplikasi dan
menciutkan kembali ke item panel aplikasi normal saat tidak digunakan. Karena
ruang bilah aplikasi yang terbatas di perangkat handset, sebaiknya gunakan
Atribut collapsibleActionView
untuk menyediakan pengguna yang lebih baik
pengalaman yang lancar bagi developer.
<?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
ic_search.xml
dalam 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, inflate menu XML
resource res/menu/options_menu.xml
dalam
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
muncul di panel aplikasi aplikasi Anda, tetapi tidak
fungsional. Jika mengetuk ikon penelusuran, Anda akan mendapatkan tampilan seperti ini:
Untuk membuat SearchView
berfungsi, Anda harus menentukan cara
SearchView
berperilaku.
Membuat konfigurasi penelusuran
Sebuah penelusuran
konfigurasi menentukan bagaimana SearchView
berperilaku dan
ditentukan dalam file res/xml/searchable.xml
. Konfigurasi penelusuran
minimal harus berisi atribut android:label
yang memiliki
nilai yang sama dengan atribut android:label
elemen
<aplikasi>
atau <activity>
di manifes Android Anda. Namun, kami juga menyarankan untuk menambahkan
Atribut android:hint
untuk memberikan gambaran kepada pengguna tentang apa yang harus dimasukkan
ke 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 sebuah
<meta-data>
yang mengarah ke file res/xml/searchable.xml
. Deklarasikan
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()
memperoleh
SearchableInfo
yang dibuat dari file XML konfigurasi penelusuran. Saat penelusuran
sudah dikaitkan dengan benar ke SearchView
dan
pengguna mengirimkan kueri, SearchView
memulai aktivitas dengan
ACTION_SEARCH
intent. Anda kemudian memerlukan aktivitas yang bisa memfilter intent ini dan menangani
kueri penelusuran.
Membuat aktivitas penelusuran
Filter aktivitas yang dapat ditelusuri untuk intent ACTION_SEARCH
dan
mencari kueri di suatu {i>dataset.<i} Untuk membuat aktivitas yang dapat ditelusuri, deklarasikan
aktivitas pilihan Anda untuk memfilter ACTION_SEARCH
intent:
<activity android:name=".SearchResultsActivity" ... > ... <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> ... </activity>
Dalam aktivitas penelusuran Anda, tangani intent ACTION_SEARCH
dengan
memeriksanya di
onCreate()
.
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 penelusuran dengan intent ACTION_SEARCH
.
Setelah mendapatkan kueri penelusuran, Anda dapat meneruskannya ke
ViewModel
, tempat Anda dapat menggunakannya di lapisan lain
arsitektur untuk mengambil hasil penelusuran yang akan ditampilkan.