L'icona SearchView
e la barra delle azioni sono disponibili solo su Android 3.0 e
in un secondo momento. Per supportare le piattaforme meno recenti, puoi utilizzare la finestra di dialogo di ricerca. La finestra di dialogo di ricerca è
fornita dal sistema che si sovrappone alla tua 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 le versioni precedenti ma vogliono avere come target Android 3.0 o versioni successive. In questo modo, la tua applicazione utilizza automaticamente la barra delle azioni su Android 3.0 o versioni successive e utilizza il sistema di menu tradizionale 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 su dispositivi meno recenti, chiama onSearchRequested()
ogni volta che un utente seleziona la ricerca
dal menu opzioni. Poiché i dispositivi con Android 3.0 e versioni successive mostrano
SearchView
nella barra delle azioni (come mostrato nella prima lezione), solo versioni
precedente a 3.0 chiama 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 venga utilizzato un utilizzo non supportato di SearchView
su dispositivi meno recenti. Nel nostro codice di esempio, questo si verifica
il 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; }