Quando è tutto pronto per aggiungere la funzionalità di ricerca alla tua app, Android ti aiuta implementare l'interfaccia utente tramite una finestra di dialogo di ricerca visualizzata in alto della finestra dell'attività o di un widget di ricerca che puoi inserire nel layout. Sia la finestra di dialogo di ricerca che il widget possono indirizzare la query di ricerca dell'utente a un su attività specifiche nella tua app. In questo modo, l'utente può avviare una ricerca da qualsiasi attività in cui la finestra di dialogo di ricerca o il widget è disponibile e il sistema avvia l'attività appropriata per eseguire la ricerca e presentare i risultati.
Altre funzionalità disponibili per la finestra di dialogo di ricerca e il widget includono:
- Ricerca vocale
- Suggerimenti di ricerca basati sulle query recenti
- Suggerimenti di ricerca che corrispondono ai risultati effettivi nei dati dell'app
Questo documento mostra come configurare l'app per fornire un'interfaccia di ricerca assistita dal sistema Android per l'invio di query di ricerca, utilizzando la finestra di dialogo di ricerca o il widget di ricerca.
Risorse correlate:
Nozioni di base
Prima di iniziare, decidi se implementare l'interfaccia di ricerca usando la finestra di dialogo di ricerca o il widget di ricerca. Forniscono la stessa funzione di ricerca ma in modi leggermente diversi:
- La finestra di dialogo di ricerca è un componente dell'interfaccia utente controllato da
il sistema Android. Quando viene attivata dall'utente, la finestra di dialogo di ricerca viene visualizzata nella
nella parte superiore dell'attività.
Il sistema Android controlla tutti gli eventi nella finestra di dialogo di ricerca. Quando invia una query, il sistema la invia all'attività che che hai specificato per gestire le ricerche. La finestra di dialogo può anche fornire suggerimenti mentre l'utente digita.
- Il widget Ricerca è un'istanza del
SearchView
che puoi posizionalo in qualsiasi punto del layout. Per impostazione predefinita, il widget di ricerca funziona come standardEditText
widget e non fa nulla, ma è possibile configurarlo in modo che l'interfaccia utente del sistema gestisce tutti gli eventi di input, fornisce le query l'attività e fornisce suggerimenti di ricerca, proprio come la ricerca .
Quando l'utente esegue una ricerca dalla finestra di dialogo di ricerca o da un widget di ricerca,
il sistema crea
Intent
e
archivia la query dell'utente al suo interno. Il sistema avvia quindi l'attività che
dichiara di gestire le ricerche, ovvero l'"attività disponibile per la ricerca", e la fornisce
l'intento. Per configurare la tua app per questo tipo di ricerca assistita, devi disporre del
seguenti:
- Una configurazione di ricerca
- Un file XML che configura alcune impostazioni per la finestra di dialogo di ricerca o il widget. Include impostazioni per funzioni quali ricerca vocale, suggerimenti di ricerca, e testo del suggerimento per la casella di ricerca.
- Un'attività disponibile per la ricerca
- La
Activity
che riceve la query di ricerca, cerca i tuoi dati e visualizza i risultati risultati.- Un'interfaccia di ricerca, fornita da:
- La finestra di dialogo di ricerca
- Per impostazione predefinita, la finestra di dialogo di ricerca è nascosta. Viene visualizzata nella parte superiore della schermo quando chiami
onSearchRequested()
quando l'utente tocca il pulsante Cerca.SearchView
widget- Il widget Ricerca ti consente di inserire la casella di ricerca in qualsiasi punto attività, anche come visualizzazione delle azioni nella barra delle app.
La parte restante di questo documento illustra come creare la configurazione di ricerca attività di ricerca e ricerca e come implementare un'interfaccia di ricerca con finestra di dialogo di ricerca o widget di ricerca.
Crea una configurazione disponibile per la ricerca
Per prima cosa ti serve un file XML,
configurazione della ricerca.
Configura alcuni aspetti dell'interfaccia utente della finestra di dialogo di ricerca o del widget e definisce le modalità
come i suggerimenti e la ricerca vocale. Questo file viene tradizionalmente
denominato searchable.xml
e deve essere salvato in res/xml/
della directory di un progetto.
Il file di configurazione della ricerca deve includere
<searchable>
come nodo radice e specificare uno o più attributi, come mostrato nell'
nell'esempio seguente:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" > </searchable>
L'attributo android:label
è l'unico attributo obbligatorio. it
punta a una risorsa stringa, che deve essere il nome dell'app. Questa etichetta non è
visibile all'utente finché non attivi i suggerimenti di ricerca per la Casella di ricerca rapida, all'indirizzo
punto in cui l'etichetta è visibile nell'elenco degli elementi ricercabili nel sistema
impostazioni.
Sebbene non sia obbligatorio, ti consigliamo di includere sempre i campi
Attributo android:hint
, che fornisce una stringa hint nella ricerca
prima che gli utenti inseriscano una query. Il suggerimento è importante perché fornisce
indizi importanti per gli utenti su ciò che possono cercare.
L'elemento <searchable>
accetta diversi altri attributi.
Tuttavia, la maggior parte degli attributi non è necessaria finché non aggiungi caratteristiche come
suggerimenti di ricerca e
ricerca vocale. Per informazioni dettagliate sui
di ricerca del file di configurazione, consulta
Configurazione di ricerca
documento di riferimento.
Creare un'attività disponibile per la ricerca
Un'attività di ricerca è l'Activity
nella tua app che esegue
effettua ricerche in base a una stringa di query e presenta i risultati di ricerca.
Quando l'utente esegue una ricerca nella finestra di dialogo di ricerca o nel widget, il sistema
inizia l'attività di ricerca e fornisce la query di ricerca in una
Intent
con
ACTION_SEARCH
un'azione. L'attività di ricerca recupera la query dal codice
QUERY
extra, poi cerca i dati e presenta i risultati.
Poiché puoi includere la finestra di dialogo di ricerca o il widget in qualsiasi altra attività in la tua app, il sistema deve sapere qual è la tua attività di ricerca in modo che in modo da poter fornire correttamente la query di ricerca. Per prima cosa, dichiara la tua funzione attività nel file manifest Android.
Dichiarare un'attività disponibile per la ricerca
Se non ne hai già uno, crea un Activity
che esegua
cerca e presenta i risultati. Non è necessario implementare la ricerca
funzionalità, devi solo creare un'attività che puoi dichiarare nel
del file manifest. All'interno del file manifest
<activity>
procedi nel seguente modo:
- Dichiara che l'attività deve accettare l'intent
ACTION_SEARCH
in un<intent-filter>
. - Specifica la configurazione di ricerca da utilizzare in una
<meta-data>
.
Ciò è mostrato nell'esempio seguente:
<application ... > <activity android:name=".SearchableActivity" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> ... </application>
L'elemento <meta-data>
deve includere
Attributo android:name
con il valore
"android.app.searchable"
e android:resource
con un riferimento al file di configurazione disponibile per la ricerca. Nella
nell'esempio precedente, si riferisce all'res/xml/searchable.xml
.
Eseguire una ricerca
Dopo aver dichiarato la tua attività di ricerca nel file manifest, segui queste istruzioni: per eseguire una ricerca nell'attività di ricerca:
Ricevi la query
Quando un utente esegue una ricerca dalla finestra di dialogo di ricerca o dal widget, il sistema
avvia la tua attività di ricerca e le invia un ACTION_SEARCH
l'intento. Questo intent trasporta la query di ricerca nella stringa QUERY
extra. Verifica questo intent quando inizia l'attività ed estrai la stringa.
Ad esempio, ecco come puoi ottenere la query di ricerca quando
inizia l'attività:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.search) // Verify the action and get the query. if (Intent.ACTION_SEARCH == intent.action) { intent.getStringExtra(SearchManager.QUERY)?.also { query -> doMySearch(query) } } }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); // Get the intent, verify the action, and get the query. Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doMySearch(query); } }
La stringa QUERY
è sempre inclusa nel parametro
Intenzione ACTION_SEARCH
. Nell'esempio precedente, la query
recuperata e passata a un metodo doMySearch()
locale in cui
dell'effettiva operazione di ricerca.
Cerca nei tuoi dati
La procedura di archiviazione e ricerca dei dati è specifica per la tua app. Puoi archiviare e cercare i dati in molti modi e questo documento non mostra come. Valuta il modo in cui archivi e cerchi i tuoi dati in termini di esigenze e dati formato. Ecco alcuni suggerimenti che potresti essere in grado di applicare:
- Se i dati sono archiviati in un database SQLite sul dispositivo, l'esecuzione di
ricerca a testo intero, utilizzando FTS3, anziché una
LIKE
query: può fornire una ricerca più efficace tra i dati di testo e può produrre risultati molto più velocemente. Consulta sqlite.org per informazioni su FTS3 eSQLiteDatabase
per informazioni su SQLite su Android. - Se i dati sono archiviati online, il rendimento della ricerca percepito potrebbe
essere inibita dalla connessione dati dell'utente. Potresti voler visualizzare un
fino a quando non viene restituita la ricerca. Consulta
android.net
per un riferimento alle API di reteProgressBar
per informazioni su come visualizzare un indicatore di avanzamento.
Presenta i risultati
Indipendentemente da dove si trovano i dati e dalle modalità di ricerca, ti consigliamo
rinvia i risultati di ricerca alla tua attività di ricerca con un
Adapter
. Questo
puoi presentare tutti i risultati di ricerca in un
RecyclerView
.
Se i dati provengono da una query di database SQLite, puoi applicare i risultati a una
RecyclerView
con un
CursorAdapter
.
Se i dati sono disponibili in un formato diverso, puoi creare un'estensione di
BaseAdapter
.
Un Adapter
collega ogni elemento di un set di dati a un
Oggetto View
. Quando
Adapter
viene applicato a RecyclerView
, ogni articolo
di dati vengono inseriti nell'elenco come una singola vista. Adapter
è
ma solo un'interfaccia, per cui implementazioni come
CursorAdapter
: per associare i dati da un
Cursor
: sono
necessaria. Se nessuna delle implementazioni esistenti funziona per i tuoi dati, puoi
implementa la tua da BaseAdapter
.
Utilizzare la finestra di dialogo di ricerca
La finestra di dialogo di ricerca fornisce una casella di ricerca mobile nella parte superiore dello schermo, con l'icona dell'app a sinistra. La finestra di dialogo di ricerca può fornire suggerimenti di ricerca come l'utente digita. Quando l'utente esegue una ricerca, il sistema invia la ricerca. a un'attività disponibile per la ricerca che esegue la ricerca.
Per impostazione predefinita, la finestra di dialogo di ricerca è sempre nascosta fino a quando l'utente non la attiva.
La tua app può attivare la finestra di dialogo di ricerca chiamando
onSearchRequested()
. Tuttavia, questo metodo non funziona finché
attiva la finestra di dialogo di ricerca per l'attività.
Per consentire alla finestra di dialogo di ricerca di eseguire ricerche, indica al sistema quale
l'attività di ricerca deve ricevere query di ricerca dalla finestra di dialogo di ricerca. Per
Ad esempio, nella sezione precedente
creare un'attività disponibile per la ricerca, un modello
viene creata l'attività denominata SearchableActivity
. Se desideri
attività separate, ad esempio una denominata OtherActivity
, per mostrare
finestra di dialogo di ricerca e consegna le ricerche a SearchableActivity
, dichiara
nel manifest che specifica che SearchableActivity
è l'attività disponibile per la ricerca
da utilizzare per la finestra di dialogo di ricerca in OtherActivity
.
Per dichiarare l'attività disponibile per la ricerca per la finestra di dialogo di ricerca di un'attività, aggiungi un elemento
<meta-data>
elemento all'interno del campo della rispettiva attività
Elemento <activity>
. <meta-data>
deve includere l'attributo android:value
che specifica
nome della classe dell'attività di ricerca e attributo android:name
con un valore di "android.app.default_searchable"
.
Ad esempio, di seguito è riportata la dichiarazione per un'attività disponibile per la ricerca:
SearchableActivity
e un'altra attività,
OtherActivity
, che usa SearchableActivity
per
esegue ricerche eseguite dalla relativa finestra di dialogo di ricerca:
<application ... > <!-- This is the searchable activity; it performs searches. --> <activity android:name=".SearchableActivity" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> <!-- This activity enables the search dialog to initiate searches in the SearchableActivity. --> <activity android:name=".OtherActivity" ... > <!-- Enable the search dialog to send searches to SearchableActivity. --> <meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" /> </activity> ... </application>
Perché ora OtherActivity
include un elemento
Elemento <meta-data>
per dichiarare quale attività disponibile per la ricerca
utilizzati per le ricerche, l'attività abilita la finestra di dialogo di ricerca. Anche se l'utente
In questa attività, il metodo onSearchRequested()
attiva
finestra di dialogo di ricerca. Quando l'utente esegue la ricerca, il sistema avvia
SearchableActivity
e consegna la ACTION_SEARCH
l'intento.
Se desideri che ogni attività nella tua app fornisca la finestra di dialogo di ricerca, inserisci
l'elemento <meta-data>
precedente come elemento secondario del
<application>
anziché ogni <activity>
. In questo modo, ogni attività
eredita il valore, fornisce la finestra di dialogo di ricerca e consegna le ricerche al
la stessa attività di ricerca. Se hai più attività disponibili per la ricerca, puoi
l'attività di ricerca predefinita inserendo un valore diverso
Dichiarazione <meta-data>
nelle singole attività.
Con la finestra di dialogo di ricerca attivata per le tue attività, la tua app è pronta per eseguire delle ricerche.
Richiamare la finestra di dialogo di ricerca
Anche se alcuni dispositivi offrono un pulsante di ricerca dedicato, il comportamento dei
pulsante può variare da un dispositivo all'altro e molti dispositivi non offrono una funzione di ricerca
. Quando utilizzi la finestra di dialogo di ricerca, devi quindi fornire un pulsante
di ricerca
nella UI che attiva la finestra di dialogo di ricerca chiamando
onSearchRequested()
.
Ad esempio, aggiungi un pulsante di ricerca nella
menu opzioni o layout UI
che chiama onSearchRequested()
.
Puoi anche attivare l'opzione "digita per cercare" attiva, che attiva
finestra di dialogo di ricerca quando l'utente inizia a digitare sulla tastiera. Le sequenze di tasti sono
inserito nella finestra di dialogo di ricerca. Puoi attivare la ricerca tramite digitazione nelle tue attività
chiamando
setDefaultKeyMode
—o
DEFAULT_KEYS_SEARCH_LOCAL
—durante
della tua attività
onCreate()
.
L'impatto della finestra di dialogo di ricerca sul ciclo di vita delle attività
La finestra di dialogo di ricerca è
Dialog
che fluttua
nella parte superiore dello schermo. Lo stack delle attività non viene modificato, quindi
quando viene visualizzata la finestra di dialogo di ricerca, nessun metodo del ciclo di vita, come
onPause()
: sono
chiamato. La tua attività perde lo stato attivo dell'input perché è stato assegnato un focus all'input
finestra di dialogo di ricerca.
Se vuoi ricevere una notifica quando viene attivata la finestra di dialogo di ricerca, sostituisci la
onSearchRequested()
. Quando il sistema chiama questo metodo,
è un'indicazione che la tua attività perde lo stato attivo dell'input nella finestra di dialogo di ricerca, quindi
puoi fare tutto il lavoro appropriato per l'evento, ad esempio mettere in pausa un gioco. A meno che
stai trasmettendo il contesto di ricerca
dati (trattati in un'altra sezione del documento),
chiamando l'implementazione della superclasse:
Kotlin
override fun onSearchRequested(): Boolean { pauseSomeStuff() return super.onSearchRequested() }
Java
@Override public boolean onSearchRequested() { pauseSomeStuff(); return super.onSearchRequested(); }
Se l'utente annulla la ricerca toccando il pulsante Indietro, la finestra di dialogo di ricerca
si chiude e l'attività riprende a concentrarsi sull'input. Puoi registrarti per ricevere una notifica
Quando la finestra di dialogo di ricerca viene chiusa con
setOnDismissListener()
,
setOnCancelListener()
,
o entrambe le cose. Devi solo registrare il
OnDismissListener
,
perché viene richiamata ogni volta che la finestra di dialogo di ricerca si chiude. La
OnCancelListener
riguarda solo gli eventi in cui l'utente esce esplicitamente dalla finestra di dialogo di ricerca, quindi
non viene chiamato quando viene eseguita una ricerca. Quando la ricerca viene eseguita,
la finestra di dialogo di ricerca scompare automaticamente.
Se l'attività corrente non è quella disponibile per la ricerca, il normale
Gli eventi del ciclo di vita dell'attività vengono attivati quando l'utente esegue un
ricerca: l'attività corrente riceve onPause()
, come descritto
in Introduzione a
attività. Tuttavia, se l'attività corrente è l'attività di ricerca,
si verifica una di queste due cose:
- Per impostazione predefinita, l'attività di ricerca riceve
intent di
ACTION_SEARCH
con una chiamata aonCreate()
, e una nuova istanza dell'attività viene riportata nella parte superiore dell'attività stack. Ora esistono due istanze della tua attività disponibile per la ricerca nel pila di attività, in modo che, toccando il pulsante Indietro, torni alla precedente dell'attività di ricerca, anziché uscire dalla funzione attività. - Se imposti
android:launchMode
su"singleTop"
, l'attività di ricerca riceve l'intentACTION_SEARCH
con una chiamata aonNewIntent(Intent)
, passando il nuovo intentACTION_SEARCH
. Ad esempio, ecco come potresti gestire questo caso, in cui la modalità di avvio dell'attività di ricerca è"singleTop"
:Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.search) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) setIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { intent.getStringExtra(SearchManager.QUERY)?.also { query -> doMySearch(query) } } }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); handleIntent(intent); } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doMySearch(query); } }
Rispetto al codice di esempio nella sezione su una ricerca, tutto il codice per gestire l'intenzione di ricerca è ora nel metodo
handleIntent()
, in modo che siaonCreate()
eonNewIntent()
possono eseguirlo.Quando il sistema chiama
onNewIntent(Intent)
, l'attività non viene è stato riavviato, quindigetIntent()
restituisce lo stesso intent ricevuto cononCreate()
. Ecco perché devi chiamaresetIntent(Intent)
all'interno dionNewIntent(Intent)
, in modo che l'intent salvato l'attività verrà aggiornata nel caso in cui tu chiamigetIntent()
in futuro.
Il secondo scenario, con l'utilizzo della modalità di avvio "singleTop"
, di solito è
è preferibile, perché al termine di una ricerca l'utente potrebbe eseguire
ricerche e non vuoi che la tua app crei più istanze
attività di ricerca. Ti consigliamo di impostare l'attività di ricerca su
Modalità di avvio di "singleTop"
nel file manifest dell'app, come mostrato nel
nell'esempio seguente:
<activity android:name=".SearchableActivity" android:launchMode="singleTop" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity>
Trasmettere i dati relativi al contesto di ricerca
In alcuni casi, puoi apportare i necessari perfezionamenti alla query di ricerca all'interno
l'attività di ricerca per ogni ricerca effettuata. Tuttavia, per perfezionare
i criteri di ricerca in base all'attività da cui l'utente esegue un
ricerca, puoi fornire dati aggiuntivi nell'intent che il sistema invia
la tua attività di ricerca. Puoi passare i dati aggiuntivi nella
APP_DATA
Bundle
, ovvero
incluso nell'intent ACTION_SEARCH
.
Per passare questo tipo di dati all'attività di ricerca, sostituisci il
Metodo onSearchRequested()
per l'attività da cui l'utente può
eseguire una ricerca, creare una Bundle
con i dati aggiuntivi e
chiamata
startSearch()
per attivare la finestra di dialogo di ricerca. Ad esempio:
Kotlin
override fun onSearchRequested(): Boolean { val appData = Bundle().apply { putBoolean(JARGON, true) } startSearch(null, false, appData, false) return true }
Java
@Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putBoolean(SearchableActivity.JARGON, true); startSearch(null, false, appData, false); return true; }
La restituzione di true indica che hai gestito correttamente questo evento di callback
chiama startSearch()
per attivare la finestra di dialogo di ricerca. Dopo che l'utente
invia una query, questa viene pubblicata nella tua attività di ricerca insieme ai dati
che aggiungi. Puoi estrarre i dati aggiuntivi dall'APP_DATA
Bundle
per perfezionare la ricerca, come mostrato nell'esempio seguente:
Kotlin
val jargon: Boolean = intent.getBundleExtra(SearchManager.APP_DATA)?.getBoolean(JARGON) ?: false
Java
Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA); if (appData != null) { boolean jargon = appData.getBoolean(SearchableActivity.JARGON); }
Utilizzare il widget Ricerca
![Un'immagine che mostra una visualizzazione di ricerca nella barra superiore dell'app](https://developer.android.com/static/images/ui/search-ui-topbar-33.png?hl=it)
Figura 1. Il widget SearchView
come
una visualizzazione delle azioni nella barra delle app.
Il widget di ricerca offre le stesse funzionalità della finestra di dialogo di ricerca. it avvia l'attività appropriata quando l'utente esegue una ricerca e può fornire suggerimenti di ricerca ed eseguire ricerche vocali. Se non è disponibile l'opzione per mettere il widget di ricerca nella barra delle app, puoi inserire il widget in qualsiasi punto del layout delle tue attività.
Configurare il widget Ricerca
Dopo aver creato
configurazione di ricerca e una
attività disponibile per la ricerca, attiva la ricerca assistita
per ogni SearchView
richiamando
setSearchableInfo()
passando l'oggetto SearchableInfo
che rappresenta la tua
disponibile per la ricerca.
Puoi ottenere un riferimento a SearchableInfo
chiamando
getSearchableInfo()
attivo
SearchManager
.
Ad esempio, se utilizzi SearchView
come visualizzazione delle azioni in
nella barra delle app, abilita il widget durante
onCreateOptionsMenu()
come illustrato nell'esempio seguente:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { // Inflate the options menu from XML. val inflater = menuInflater inflater.inflate(R.menu.options_menu, menu) // Get the SearchView and set the searchable configuration. val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager (menu.findItem(R.id.menu_search).actionView as SearchView).apply { // Assumes current activity is the searchable activity. setSearchableInfo(searchManager.getSearchableInfo(componentName)) setIconifiedByDefault(false) // Don't iconify the widget. Expand it by default. } return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the options menu from XML. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); // Get the SearchView and set the searchable configuration. SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); // Assumes current activity is the searchable activity. searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); // Don't iconify the widget. Expand it by default. return true; }
Il widget di ricerca è ora configurato e il sistema fornisce le query di ricerca alla tua attività di ricerca. Puoi anche attivare suggerimenti di ricerca per il widget di ricerca.
Per ulteriori informazioni sulle visualizzazioni Azioni nella barra delle app, consulta Utilizzare visualizzazioni di azioni e azioni di terze parti.
Altre funzionalità dei widget di ricerca
Il widget SearchView
offre alcune funzionalità aggiuntive
potrebbero volere:
- Un pulsante Invia
- Per impostazione predefinita, non esiste un pulsante per inviare una query di ricerca, quindi l'utente deve
premi il tasto Invio sulla tastiera per avviare una ricerca. Tu
puoi aggiungere un comando "submit" chiamando il pulsante
setSubmitButtonEnabled(true)
. - Perfezionamento delle query per i suggerimenti di ricerca
- Quando attivi i suggerimenti di ricerca, in genere ti aspetti che gli utenti selezionino una
suggerimento, ma potrebbero anche voler perfezionare la query di ricerca suggerita.
Puoi aggiungere un pulsante accanto a ogni suggerimento che inserisce il suggerimento
nella casella di ricerca per il perfezionamento da parte dell'utente chiamando
setQueryRefinementEnabled(true)
. - Possibilità di attivare/disattivare la visibilità della casella di ricerca
- Per impostazione predefinita, il widget di ricerca è "iconato", vale a dire
rappresentato solo da un'icona di ricerca, una lente d'ingrandimento. Si espande in
mostrare la casella di ricerca quando l'utente tocca l'icona. Come mostrato nell'articolo
esempio, puoi mostrare la casella di ricerca per impostazione predefinita richiamando
setIconifiedByDefault(false)
. Puoi anche attivare/disattivare l'aspetto del widget di ricerca chiamandosetIconified()
.
Nella classe SearchView
ci sono molte altre API che consentono
personalizzi il widget Ricerca. Tuttavia, la maggior parte di questi vengono utilizzati solo quando
gestire personalmente tutti gli input degli utenti, invece di utilizzare il sistema Android per fornire
query di ricerca e mostrare suggerimenti di ricerca.
Usare il widget e la finestra di dialogo
Se inserisci il widget di ricerca nella barra delle app come
action view e attiva
in modo che venga visualizzato nella barra delle app, se c'è spazio, impostando
android:showAsAction="ifRoom"
, il widget Ricerca potrebbe
non appaiono nella visualizzazione Azioni. Potrebbe invece essere visualizzata una voce di menu
o dal menu Fogli Google. Ad esempio, se l'app viene eseguita su uno schermo più piccolo,
spazio sufficiente nella barra delle app per visualizzare il widget di ricerca insieme ad altre azioni
elementi o elementi di navigazione, in modo che la voce di menu appaia invece nell'overflow
o dal menu Fogli Google. Quando è inserito nel menu extra, l'elemento funziona come un normale menu
e non mostra la visualizzazione delle azioni, ovvero il widget Ricerca.
Per gestire questa situazione, la voce di menu a cui alleghi il widget di ricerca
deve attivare la finestra di dialogo di ricerca quando l'utente la seleziona dal menu extra.
A questo scopo, implementa
onOptionsItemSelected()
per gestire la "Ricerca" voce di menu e aprire la finestra di dialogo di ricerca
onSearchRequested()
.
Per ulteriori informazioni su come funzionano gli elementi nella barra delle app e su come gestirli questa situazione, vedi Aggiungi la barra delle app.
Aggiungi ricerca vocale
Puoi aggiungere la funzionalità di ricerca vocale alla finestra di dialogo di ricerca o al widget tramite:
aggiungendo l'attributo android:voiceSearchMode
ai file
configurazione. Verrà aggiunto un pulsante di ricerca vocale che avvia un prompt vocale.
Quando l'utente termina di parlare, la query di ricerca trascritta viene inviata al tuo
attività di ricerca.
Ciò è mostrato nell'esempio seguente:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint" android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" > </searchable>
Per attivare la voce è necessario il valore showVoiceSearchButton
eseguire una ricerca. Il secondo valore, launchRecognizer
, specifica che
pulsante di ricerca vocale deve avviare un riconoscimento che restituisca il
trascritto il testo all'attività di ricerca.
Puoi fornire attributi aggiuntivi per specificare il comportamento della ricerca vocale, come la lingua prevista e il numero massimo di risultati da restituire. Consulta Consulta il riferimento Configurazione di ricerca per ulteriori informazioni sugli attributi disponibili.
di Gemini Advanced.Aggiungi suggerimenti di ricerca
Sia la finestra di dialogo di ricerca che il widget di ricerca possono fornire suggerimenti per la ricerca mentre l'utente digita, con l'assistenza del sistema Android. Il sistema gestisce l'elenco dei suggerimenti e gestisce l'evento quando l'utente seleziona un suggerimento.
Puoi fornire due tipi di suggerimenti di ricerca:
- Suggerimenti di ricerca per query recenti
- Questi suggerimenti sono parole che l'utente ha precedentemente utilizzato come ricerca query nella tua app. Vedi Aggiungi suggerimenti di ricerca personalizzati.
- Suggerimenti di ricerca personalizzati
- Si tratta di suggerimenti di ricerca che fornisci dalla tua origine dati per Aiuta gli utenti a selezionare immediatamente l'ortografia o l'elemento corretto che stanno cercando . Consulta la sezione Aggiungere la ricerca personalizzata suggerimenti per ulteriori informazioni.