La SearchView e la barra delle azioni sono disponibili solo su Android 3.0 e versioni successive. Per supportare le piattaforme meno recenti, puoi tornare alla finestra di dialogo di ricerca. La finestra di dialogo di ricerca è un'interfaccia utente fornita dal sistema che si sovrappone all'applicazione quando viene richiamata.
Impostare i livelli API minimo e target
Per configurare la finestra di dialogo di ricerca, dichiara innanzitutto nel manifest che vuoi supportare i dispositivi meno recenti, ma vuoi avere come target Android 3.0 o versioni successive. In questo modo, 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> ...
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
SearchView nella barra delle azioni (come illustrato nella prima lezione), solo le versioni
precedenti alla 3.0 chiamano onOptionsItemSelected() quando
l'utente seleziona la voce 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 build di 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 su dispositivi meno recenti. Nel nostro codice di esempio, questo avviene 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; }