Mempertahankan Kompatibilitas Mundur

Mencoba cara Compose
Jetpack Compose adalah toolkit UI yang direkomendasikan untuk Android. Pelajari cara menambahkan fungsi penelusuran di Compose.

SearchView dan panel tindakan hanya tersedia di Android 3.0 dan yang lebih baru. Untuk mendukung platform lama, Anda dapat kembali ke dialog penelusuran. Dialog penelusuran adalah UI yang disediakan sistem yang berada di atas aplikasi Anda saat dipanggil.

Menetapkan level Minimum dan API Target

Untuk menyiapkan dialog penelusuran, pertama-tama nyatakan dalam manifes bahwa Anda ingin mendukung perangkat lama, tetapi ingin menargetkan Android 3.0 atau versi lebih baru. Jika Anda melakukan ini, aplikasi akan otomatis menggunakan panel tindakan di Android 3.0 atau yang lebih baru dan menggunakan sistem menu tradisional di perangkat lama:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<application>
...

Menyediakan Dialog Penelusuran untuk Perangkat Lama

Untuk memanggil dialog penelusuran di perangkat lama, panggil onSearchRequested() setiap kali pengguna memilih item menu penelusuran dari menu opsi. Karena perangkat Android 3.0 dan yang lebih baru menampilkan SearchView di panel tindakan (seperti yang ditunjukkan dalam pelajaran pertama), hanya versi yang lebih lama dari 3.0 yang memanggil onOptionsItemSelected() saat pengguna memilih item menu penelusuran.

Kotlin

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.search -> {
            onSearchRequested()
            true
        }
        else -> false
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}

Memeriksa Versi Build Android pada Waktu Proses

Pada waktu proses, periksa versi perangkat untuk memastikan penggunaan SearchView yang tidak didukung tidak terjadi di perangkat lama. Dalam kode contoh kami, hal ini terjadi pada metode onCreateOptionsMenu():

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {

    menuInflater.inflate(R.menu.options_menu, menu)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        (menu.findItem(R.id.search).actionView as SearchView).apply {
            setSearchableInfo(searchManager.getSearchableInfo(componentName))
            setIconifiedByDefault(false)
        }
    }
    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
    }
    return true;
}