Rimanenti compatibili con le versioni precedenti

L'SearchView e la barra delle azioni sono disponibili solo su Android 3.0 e versioni successive. Per supportare le piattaforme precedenti, puoi ricorrere alla finestra di dialogo di ricerca. La finestra di dialogo di ricerca è un'interfaccia utente fornita dal sistema che si sovrappone alla tua applicazione quando viene richiamata.

Imposta i livelli API minimo e target

Per configurare la finestra di dialogo di ricerca, devi innanzitutto dichiarare nel manifest che vuoi supportare i dispositivi meno recenti, ma scegliere come target Android 3.0 o versioni successive. Quando esegui questa operazione, l'applicazione utilizza automaticamente la barra delle azioni su Android 3.0 o versioni successive e il sistema di menu tradizionale sui dispositivi meno recenti:

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

<application>
...

Fornisci la finestra di dialogo di ricerca per i dispositivi meno recenti

Per richiamare la finestra di dialogo di ricerca sui dispositivi meno recenti, chiama onSearchRequested() ogni volta che un utente seleziona la voce di menu di ricerca dal menu opzioni. Poiché i dispositivi Android 3.0 e versioni successive mostrano SearchView nella barra delle azioni (come mostrato nella prima lezione), solo le versioni precedenti alla 3.0 chiamano onOptionsItemSelected() quando l'utente seleziona la voce del menu di ricerca.

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;
    }
}

Controlla la versione della build Android in fase di runtime

In fase di runtime, controlla la versione del dispositivo per assicurarti che non si verifichi un utilizzo non supportato di SearchView sui dispositivi meno recenti. Nel nostro codice di esempio, questo si verifica nel metodo 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;
}