Crea un'interfaccia di ricerca

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 standard EditText 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 .
di Gemini Advanced.

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:

  1. Dichiara che l'attività deve accettare l'intent ACTION_SEARCH in un <intent-filter> .
  2. 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:

  1. Ricevi la query.
  2. Cercare i dati.
  3. Presenta i risultati.

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 e SQLiteDatabase 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 rete ProgressBar per informazioni su come visualizzare un indicatore di avanzamento.
di Gemini Advanced.

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 a onCreate(), 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'intent ACTION_SEARCH con una chiamata a onNewIntent(Intent), passando il nuovo intent ACTION_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 sia onCreate() e onNewIntent() possono eseguirlo.

    Quando il sistema chiama onNewIntent(Intent), l'attività non viene è stato riavviato, quindi getIntent() restituisce lo stesso intent ricevuto con onCreate(). Ecco perché devi chiamare setIntent(Intent) all'interno di onNewIntent(Intent), in modo che l'intent salvato l'attività verrà aggiornata nel caso in cui tu chiami getIntent() 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&#39;immagine che mostra una visualizzazione di ricerca nella barra superiore dell&#39;app

Figura 1. Il widget SearchViewcome 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 chiamando setIconified().

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.