Mempertahankan Kompatibilitas Mundur

SearchView dan panel tindakan hanya tersedia di Android 3.0 dan nanti. Untuk mendukung platform lama, Anda dapat kembali ke dialog penelusuran. Dialog pencarian adalah yang menyediakan UI yang ditempatkan di atas aplikasi Anda saat dipanggil.

Menetapkan level Minimum dan API Target

Untuk menyiapkan dialog penelusuran, deklarasikan terlebih dahulu dalam manifes bahwa Anda ingin mendukung dialog penelusuran perangkat non-esensial, namun ingin menargetkan Android 3.0 atau versi yang lebih baru. Saat Anda melakukannya, aplikasi Anda secara otomatis menggunakan bilah tindakan di Android 3.0 atau yang lebih baru dan menggunakan sistem menu tradisional pada perangkat yang lebih 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 penelusuran item menu dari menu opsi. Karena perangkat Android 3.0 dan yang lebih tinggi menampilkan SearchView di panel tindakan (seperti yang ditunjukkan dalam pelajaran pertama), hanya versi yang lebih lama dari 3.0 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 kita, ini terjadi di 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;
}