Rimanenti compatibili con le versioni precedenti

Prova la funzionalità Scrivi
Jetpack Compose è il toolkit per l'interfaccia utente consigliato per Android. Scopri come aggiungere la funzionalità di ricerca in Scrivi.

SearchView e la barra delle app sono disponibili solo su Android 3.0 e versioni successive. Per supportare le piattaforme meno recenti, puoi utilizzare la finestra di dialogo di ricerca. La finestra di dialogo di ricerca è un'interfaccia utente fornita dal sistema che viene sovrapposta all'applicazione quando viene richiamata.

Impostare i livelli API minimo e target

Per configurare la finestra di dialogo di ricerca, dichiara nel file manifest che vuoi supportare i dispositivi meno recenti, ma che vuoi avere come target Android 3.0 o versioni successive. In questo modo, l'applicazione utilizzerà automaticamente la barra delle app 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>
...

Fornire 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 delle opzioni. Poiché i dispositivi Android 3.0 e versioni successive mostrano il pulsante SearchView nella barra delle app (come dimostrato nella prima lezione), solo le versioni precedenti a 3.0 chiamano onOptionsItemSelected() quando l'utente seleziona l'elemento di 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;
    }
}

Controllare la versione della build Android in fase di esecuzione

In fase di esecuzione, 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 accade 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;
}