Tworzenie interfejsu wyszukiwania

Gdy zechcesz dodać funkcję wyszukiwania do swojej aplikacji, Android pomoże Ci zaimplementuj interfejs za pomocą okna wyszukiwania wyświetlanego u góry w oknie aktywności lub w widżecie wyszukiwania, które możesz wstawić do układu. Zarówno okno wyszukiwania, jak i widżet mogą przekazywać zapytanie użytkownika do określonych aktywności w aplikacji. W ten sposób użytkownik może rozpocząć wyszukiwanie gdy dostępne jest okno lub widżet wyszukiwania, po czym system uruchamia odpowiednie działanie do przeprowadzenia wyszukiwania i przedstawienia wyników.

Inne funkcje dostępne w oknie wyszukiwania i widżecie:

  • Wyszukiwanie głosowe
  • Sugestie wyszukiwania na podstawie ostatnich zapytań
  • Sugestie wyszukiwania, które pasują do rzeczywistych wyników w danych aplikacji

Z tego dokumentu dowiesz się, jak skonfigurować interfejs wyszukiwania w aplikacji która jest wspomagana przez system Android przy dostarczaniu zapytań, używając albo w oknie wyszukiwania lub w widżecie wyszukiwania.

Przydatne materiały

Podstawy

Zanim zaczniesz, zdecyduj, czy chcesz wdrożyć interfejs wyszukiwania za pomocą okna wyszukiwania lub widżetu wyszukiwania. Zapewniają to samo wyszukiwanie lecz nieco inaczej:

  • Okno wyszukiwania to komponent interfejsu, którego działaniem steruje funkcja system Android. Po aktywowaniu przez użytkownika okno wyszukiwania pojawia się na na górze strony.

    System Android kontroluje wszystkie zdarzenia w oknie wyszukiwania. Gdy użytkownik wysyła zapytanie, system przesyła je do działania, które które określisz do obsługi wyszukiwań. To okno może też zawierać wyszukiwanie sugestie podczas pisania.

  • Widżet wyszukiwania jest instancją SearchView, które można w dowolnym miejscu układu. Domyślnie widżet wyszukiwania działa jak standardowa EditText i nic nie robi, ale możesz go skonfigurować tak, system obsługuje wszystkie zdarzenia wejściowe, wysyła zapytania do odpowiednich i przedstawia sugestie wyszukiwania, tak jak .
.

Gdy użytkownik przeprowadza wyszukiwanie w oknie wyszukiwania lub w widżecie wyszukiwania, system tworzy Intent i zapisuje w nim zapytanie użytkownika. System rozpocznie aktywność, deklaruj, że chcesz obsługiwać wyszukiwania (czyli „aktywność dostępną dla wyszukiwarki”) i ją dostarcza intencja. Aby skonfigurować aplikację do tego rodzaju wspomaganego wyszukiwania, musisz mieć :

  • Konfiguracja wyszukiwania
    Plik XML służący do konfigurowania niektórych ustawień okna wyszukiwania lub widżetu. Obejmuje ustawienia takich funkcji jak wyszukiwanie głosowe, sugestie wyszukiwania, i tekst podpowiedzi.
  • Aktywność, którą można przeszukiwać
    Activity w odpowiedzi na zapytanie, przeszukuje dane i wyświetla wyników.
  • Interfejs wyszukiwania udostępniany przez:
    • Okno wyszukiwania
      Okno wyszukiwania jest domyślnie ukryte. Znajduje się on w górnej części Ekran podczas rozmowy onSearchRequested() gdy użytkownik kliknie przycisk Szukaj.
    • SearchView widżet
      Widżet wyszukiwania pozwala umieścić pole wyszukiwania w dowolnym miejscu np. jako widok działań na pasku aplikacji.

Z dalszej części tego dokumentu dowiesz się, jak utworzyć konfigurację wyszukiwania. działania, które można przeszukiwać, oraz jak wdrożyć interfejs wyszukiwania za pomocą w oknie wyszukiwania lub w widżecie wyszukiwania.

Tworzenie konfiguracji z możliwością wyszukiwania

Pierwszą rzeczą, jakiej potrzebujesz, jest plik XML o nazwie konfiguracji wyszukiwania. Konfiguruje określone aspekty interfejsu okna wyszukiwania lub widżetu i określa, takie jak sugestie i wyszukiwanie głosowe. Ten plik jest tradycyjnie o nazwie searchable.xml i musi zostać zapisany w res/xml/ katalogu projektu.

Plik konfiguracji wyszukiwania musi zawierać parametr <searchable> jako węzła głównego i określ co najmniej jeden atrybut, tak jak to pokazano w tagu następujący przykład:

<?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>

Jedynym wymaganym atrybutem jest android:label. it wskazuje zasób w postaci ciągu znaków, który musi być nazwą aplikacji. Ta etykieta nie jest widoczna dla użytkownika do czasu włączenia sugestii wyszukiwania w Oknie szybkiego wyszukiwania na stronie czyli punkt, w którym etykieta jest widoczna na liście elementów dostępnych do przeszukiwania w systemie. ustawieniach.

Chociaż nie jest to wymagane, zalecamy, aby zawsze dodawać parametr Atrybut android:hint, który dostarcza w wyszukiwaniu ciąg podpowiedzi zanim użytkownicy wpiszą zapytanie. Podpowiedź jest ważna, ponieważ zapewnia zawierają ważne wskazówki dla użytkowników na temat tego, co mogą przeszukiwać.

Element <searchable> akceptuje kilka innych atrybutów. Jednak większość atrybutów nie jest Ci potrzebna, dopóki nie dodasz cech, takich jak sugestii wyszukiwania oraz wyszukiwaniem głosowym. Szczegółowe informacje na temat pliku konfiguracyjnego wyszukiwania, Konfiguracja wyszukiwania dokument referencyjny.

Tworzenie aktywności, którą można przeszukiwać

Aktywność, którą można przeszukiwać, to Activity w aplikacji, który wykonuje przeszukuje na podstawie ciągu zapytania i prezentuje wyniki wyszukiwania.

Gdy użytkownik przeprowadza wyszukiwanie w oknie lub w widżecie wyszukiwania, system rozpoczyna aktywność dostępną do przeszukiwania i przesyła je zapytanie w formie Intent z ACTION_SEARCH działania. Aktywność do przeszukiwania pobiera zapytanie z interfejsu intencji QUERY a następnie przeszukuje dane i przedstawia wyniki.

Okno lub widżet wyszukiwania można dołączyć do każdej innej aktywności w system musi wiedzieć, którą aktywność można przeszukiwać, że poprawnie dostarczy zapytanie. Najpierw zadeklaruj dostępny dla wyszukiwarki, w pliku manifestu Androida.

Deklarowanie aktywności możliwej do wyszukiwania

Jeśli nie masz jeszcze identyfikatora Activity, utwórz go przeszukuje i prezentuje wyniki. Nie musisz implementować wyszukiwania już działa – wystarczy utworzyć działanie, które będzie można zadeklarować w pliku manifestu. Wewnątrz pliku manifestu <activity> , wykonaj te czynności:

  1. Zadeklaruj aktywność, aby zaakceptować intencję ACTION_SEARCH w <intent-filter>. .
  2. Określ konfigurację wyszukiwania do użycia w <meta-data> .

Widać to w tym przykładzie:

<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>

Element <meta-data> musi zawierać parametr android:name o wartości "android.app.searchable" oraz android:resource z odwołaniem do możliwego do przeszukiwania pliku konfiguracji. W poprzedniego przykładu odnosi się do atrybutu res/xml/searchable.xml .

Przeprowadź wyszukiwanie

Po zadeklarowaniu w pliku manifestu aktywności do przeszukiwania postępuj zgodnie z tym procedura wyszukiwania w aktywności, którą można przeszukiwać:

  1. Odbierz zapytanie.
  2. Przeszukiwanie danych.
  3. Zaprezentuj wyniki.

Odbieranie zapytania

Gdy użytkownik przeprowadza wyszukiwanie w oknie lub w widżecie wyszukiwania, system rozpoczyna aktywność związaną z wyszukiwaniem i wysyła jej adres ACTION_SEARCH intencji. Ta intencja przenosi wyszukiwane hasło w ciągu znaków QUERY dodatkowe. Sprawdź tę intencję po rozpoczęciu aktywności i wyodrębnij ciąg znaków. Aby na przykład wyświetlić zapytanie, gdy jest dostępne do przeszukiwania aktywność rozpoczyna się:

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);
    }
}

Ciąg QUERY jest zawsze uwzględniany w parametrze Intencja ACTION_SEARCH. W poprzednim przykładzie zapytanie to pobrane i przekazane do lokalnej metody doMySearch(), w której jaka jest operacja wyszukiwania.

Przeszukiwanie danych

Proces przechowywania i wyszukiwania danych jest unikalny dla Twojej aplikacji. Dostępne opcje przechowywać i przeszukiwać dane na wiele sposobów, a tego dokumentu nie dowiesz się, jak to zrobić. Zastanów się, jak przechowujesz i przeszukujesz dane pod kątem własnych potrzeb i danych . Oto wskazówki, które możesz zastosować:

  • Jeśli Twoje dane są przechowywane w bazie danych SQLite na urządzeniu, wykonaj wyszukiwanie pełnotekstowe – przy użyciu FTS3 zamiast LIKE zapytania — może zapewnić dokładniejsze wyszukiwanie danych tekstowych oraz znacznie szybciej przynosić efekty. Zobacz sqlite.org dla o FTS3 oraz SQLiteDatabase , aby dowiedzieć się więcej o SQLite na Androidzie.
  • Jeśli Twoje dane są przechowywane online, przewidywana skuteczność wyszukiwania może transmisji danych użytkownika. Możesz w niej wyświetlać wskaźnik postępu, aż wyszukiwanie zostanie przywrócone. Zobacz android.net znajdziesz informacje o sieciowych interfejsach API. ProgressBar. .
.

Zaprezentuj wyniki

Niezależnie od tego, gdzie znajdują się Twoje dane i jak je przeszukujesz, zalecamy wyniki wyszukiwania zostaną zwrócone do aktywności możliwej do wyszukiwania z tagiem Adapter Ten możesz zaprezentować wszystkie wyniki wyszukiwania RecyclerView Jeśli dane pochodzą z zapytania do bazy danych SQLite, możesz je zastosować do RecyclerView za pomocą CursorAdapter Jeśli dane mają inny format, możesz utworzyć rozszerzenie BaseAdapter

Adapter łączy każdy element ze zbioru danych w View obiekt. Kiedy Adapter jest stosowany w RecyclerView, każdy danych jest wstawianych na liście jako pojedynczy widok. Adapter to tylko interfejs, więc implementacje takie jak CursorAdapter – do wiązania danych z Cursor – są niezbędną. Jeśli żadna z obecnych implementacji nie działa z Twoimi danymi, możesz zaimplementuj własne z platformy BaseAdapter.

Korzystanie z okna wyszukiwania

U góry ekranu znajduje się pływające pole wyszukiwania, z ikoną aplikacji po lewej stronie. Okno wyszukiwania może wyświetlać sugestie wyszukiwania wpisywanych przez użytkownika. Gdy użytkownik przeprowadza wyszukiwanie, system wysyła zapytanie do aktywności możliwej do wyszukiwania, która wykonuje wyszukiwanie.

Domyślnie okno wyszukiwania jest zawsze ukryte, dopóki użytkownik go nie aktywuje. Aplikacja może aktywować okno wyszukiwania, łącząc się z onSearchRequested() Ta metoda nie zadziała, dopóki nie wykonasz włączyć okno wyszukiwania dla aktywności.

Aby umożliwić wyszukiwanie w oknie wyszukiwania, wskaż systemowi, aktywność, którą można przeszukiwać, musi otrzymywać zapytania z okna wyszukiwania. Dla: w poprzedniej sekcji na temat tworzą aktywność, którą można przeszukiwać, aktywność o nazwie SearchableActivity została utworzona. Jeśli chcesz, oddzielne działanie, takie jak OtherActivity, w celu wyświetlenia w oknie wyszukiwania i dostarczać wyszukiwania do SearchableActivity, zadeklaruj z pliku manifestu, że SearchableActivity jest aktywnością dostępną do wyszukiwania będzie używany w oknie wyszukiwania w OtherActivity.

Aby zadeklarować aktywność do przeszukiwania w oknie wyszukiwania aktywności, dodaj parametr <meta-data> w nagłówku odpowiedniej aktywności <activity>. <meta-data> musi zawierać atrybut android:value określający nazwa klasy aktywności i atrybut android:name, które można przeszukiwać o wartości "android.app.default_searchable".

Oto deklaracja dla aktywności możliwej do wyszukiwania, SearchableActivity, i jeszcze inna aktywność, OtherActivity, który używa SearchableActivity do wykonywać wyszukiwania wykonywane w oknie wyszukiwania:

<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>

Ponieważ OtherActivity zawiera teraz komponenty <meta-data> określający aktywność do wyszukiwania używane do wyszukiwania, aktywność włącza okno wyszukiwania. Mimo że użytkownik jest w tej aktywności metoda onSearchRequested() aktywuje metodę w oknie wyszukiwania. Gdy użytkownik przeprowadzi wyszukiwanie, system uruchomi się SearchableActivity i dostarczy ACTION_SEARCH intencji.

Jeśli chcesz, aby każda aktywność w aplikacji udostępniała okno wyszukiwania, wstaw poprzedni element <meta-data> jako element podrzędny tagu <application>. , a nie każdego <activity>. Dzięki temu każda aktywność dziedziczy wartość, wyświetla okno wyszukiwania i udostępnia wyszukiwanie na podstawie tę samą aktywność związaną z wyszukiwaniem. Jeśli masz wiele czynności do przeszukiwania, zastąpić domyślną aktywność do przeszukiwania, umieszczając inną <meta-data> w ramach poszczególnych aktywności.

Gdy okno wyszukiwania jest teraz włączone dla Twojej aktywności, aplikacja jest gotowa przeprowadzać wyszukiwania.

Wywołaj okno wyszukiwania

Chociaż niektóre urządzenia mają specjalny przycisk wyszukiwania, działanie przycisk może się różnić w zależności od urządzenia, a wiele urządzeń nie umożliwia wyszukiwania ani przycisku. Jeśli więc używasz okna wyszukiwania, musisz dodać przycisk wyszukiwania które aktywuje okno wyszukiwania, wywołując onSearchRequested()

Na przykład dodaj przycisk wyszukiwania do menu opcji lub układ interfejsu który dzwoni pod numer onSearchRequested().

Możesz też włączyć funkcję wyszukiwania przez pisanie która aktywuje w oknie wyszukiwania, gdy użytkownik zacznie pisać na klawiaturze. Kombinacje klawiszy wstawione do okna wyszukiwania. Możesz włączyć funkcję pisania przez pisanie w swojej aktywności Połączenie setDefaultKeyMode lub DEFAULT_KEYS_SEARCH_LOCAL w trakcie onCreate() .

Wpływ okna wyszukiwania na cykl życia aktywności

Okno wyszukiwania to Element Dialog na wodzie u góry ekranu. Nie powoduje to żadnych zmian w stosie aktywności, więc po wyświetleniu okna wyszukiwania, nie mogą być używane żadne metody cyklu życia, takie jak onPause() – są . Aktywność nie jest ukierunkowana na dane wejściowe, ponieważ dane wejściowe są wskazywane w oknie wyszukiwania.

Jeśli chcesz otrzymać powiadomienie po uruchomieniu okna wyszukiwania, zastąp Metoda onSearchRequested(). Gdy system wywoła tę metodę, wskazuje, że Twoja aktywność nie skupia się na danych wejściowych w oknie wyszukiwania, możesz wykonać dowolną czynność związaną z wydarzeniem, np. wstrzymać grę. O ile przekazujesz kontekst wyszukiwania – omówione w innej sekcji tego dokumentu – zakończ przez wywołanie implementacji klasy nadrzędnej:

Kotlin

override fun onSearchRequested(): Boolean {
    pauseSomeStuff()
    return super.onSearchRequested()
}

Java

@Override
public boolean onSearchRequested() {
    pauseSomeStuff();
    return super.onSearchRequested();
}

Jeśli użytkownik anuluje wyszukiwanie, klikając przycisk Wstecz, zamyka się i ponownie uaktywnia dane wejściowe. Możesz się zarejestrować, aby otrzymać powiadomienie po zamknięciu okna wyszukiwania setOnDismissListener(), setOnCancelListener(), lub jedno i drugie. Wystarczy zarejestrować OnDismissListener, ponieważ jest ona wywoływana po każdym zamknięciu okna wyszukiwania. OnCancelListener dotyczy tylko zdarzeń, w których użytkownik wyraźnie zamknie okno wyszukiwania, więc nie jest wywoływane podczas wyszukiwania. Podczas wyszukiwania parametr automatycznie znika.

Jeśli bieżącej aktywności nie można wyszukać, wtedy normalne działanie zdarzenia cyklu życia aktywności są wyzwalane, gdy użytkownik wykona wyszukiwanie – bieżąca aktywność otrzymuje onPause() zgodnie z opisem w artykule Wprowadzenie do aktywności. Jeśli jednak bieżącą aktywność można przeszukiwać, wówczas mają miejsce 2 czynności:

  • Domyślnie aktywność, którą można przeszukiwać, otrzymuje Intencja ACTION_SEARCH z wywołaniem do: onCreate(), nowe wystąpienie działania wyświetla się u góry listy działań, stosów. W Google Analytics są teraz dwa wystąpienia stosu aktywności, więc naciśnięcie przycisku Wstecz wróci wystąpienia aktywności możliwej do przeszukiwania, zamiast pozostawiać działania.
  • Jeśli ustawisz wartość "singleTop" na android:launchMode, wtedy aktywność do przeszukiwania otrzymuje intencję ACTION_SEARCH z wywołaniem do onNewIntent(Intent), przekazującą nową intencję ACTION_SEARCH. Aby na przykład możesz rozwiązać ten problem. Tryb uruchamiania aktywności związanej z wyszukiwaniem jest "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);
        }
    }
    

    Porównajmy z przykładowym kodem w sekcji o wykonując wyszukiwanie, cały kod do obsługi funkcji zamiar wyszukiwania jest teraz w metodzie handleIntent(), więc zarówno onCreate() i onNewIntent() mogą go wykonać.

    Gdy system wywoła metodę onNewIntent(Intent), aktywność nie jest zrestartowano, więc getIntent() zwraca tę samą intencję, która została odebrana za pomocą funkcji onCreate(). Właśnie dlatego trzeba zadzwonić setIntent(Intent) wewnątrz onNewIntent(Intent): aby intencja zapisana przez metodę aktywność będzie aktualizowana na wypadek, gdyby w przyszłości zadzwonił(a) pod numer getIntent().

Drugi scenariusz, przy użyciu trybu uruchamiania "singleTop", jest zwykle jest preferowane, ponieważ po przeprowadzeniu wyszukiwania użytkownik może wykonać dodatkowe wyszukiwania i nie chcesz, by aplikacja tworzyła wiele wystąpień aktywność, którą można przeszukiwać. Zalecamy ustawienie aktywności związanej z wyszukiwaniem na Tryb uruchamiania "singleTop" w manifeście aplikacji, jak widać w tabeli następujący przykład:

<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>

Przekazywanie danych kontekstowych wyszukiwania

W niektórych przypadkach można wprowadzić niezbędne doprecyzowania zapytania, które znajduje się wewnątrz aktywność, którą można przeszukiwać w przypadku każdego przeprowadzonego wyszukiwania. Jeśli jednak chcesz zawęzić kryteria wyszukiwania na podstawie aktywności, którą użytkownik wykonywał możesz przekazać dodatkowe dane w intencji, którą system wysyła do Twoją aktywność, którą można przeszukiwać. Dodatkowe dane możesz przekazać w sekcji APP_DATA Bundle, czyli uwzględnione w intencji ACTION_SEARCH.

Aby przekazywać tego rodzaju dane do aktywności umożliwiającej wyszukiwanie, zastąp parametr Metoda onSearchRequested() w przypadku aktywności, z której użytkownik może korzystać przeprowadzić wyszukiwanie, utworzyć Bundle z dodatkowymi danymi, zadzwoń startSearch() aby aktywować okno wyszukiwania. Na przykład:

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;
 }

Zwracanie „true” oznacza, że udało Ci się obsłużyć zdarzenie wywołania zwrotnego i Wywołaj startSearch(), aby aktywować okno wyszukiwania. Po użytkowniku przesyła zapytanie, jest ono przesyłane do aktywności możliwej do przeszukiwania wraz z danymi dodany przez Ciebie. Dodatkowe dane możesz wyodrębnić z tabeli APP_DATA Bundle, aby zawęzić wyszukiwanie, jak w tym przykładzie:

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);
}

Używanie widżetu wyszukiwania

Obraz przedstawiający widok wyszukiwania na górnym pasku aplikacji

Rysunek 1. SearchViewWidżet jako z widokiem działań na pasku aplikacji.

Widżet wyszukiwania oferuje te same funkcje co okno wyszukiwania. it rozpoczyna odpowiednie działanie, gdy użytkownik przeprowadza wyszukiwanie, i może wyświetlać sugestie wyszukiwania i przeprowadzać wyszukiwanie głosowe; Jeśli nie widzisz tej opcji w przypadku widżet wyszukiwania na pasku aplikacji możesz zamiast tego widżet w układzie aktywności.

Konfigurowanie widżetu wyszukiwania

Po utworzeniu konfiguracji wyszukiwania oraz aktywność dostępna do wyszukiwania, włącz wyszukiwanie wspomagane za każde SearchView, wywołując setSearchableInfo() i przekazując mu obiekt SearchableInfo, który reprezentuje którą można przeszukiwać.

Możesz uzyskać odniesienie do: SearchableInfo, dzwoniąc pod numer getSearchableInfo() włączono SearchManager

Jeśli np. używasz SearchView jako widoku działania w na pasku aplikacji, włącz widżet onCreateOptionsMenu() zgodnie z poniższym przykładem:

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;
}

Widżet wyszukiwania jest teraz skonfigurowany, a system dostarcza zapytania do Twojej aktywności związanej z wyszukiwaniem. Możesz też włączyć sugestii wyszukiwania dotyczących widżetu wyszukiwania.

Więcej informacji o widokach działań na pasku aplikacji: Korzystanie z widoków działań i działań dostawców usług.

Inne funkcje widżetu wyszukiwania

Widżet SearchView udostępnia kilka dodatkowych funkcji, może chcieć:

Przycisk przesyłania
Domyślnie nie ma przycisku umożliwiającego przesłanie zapytania, więc użytkownik musi to zrobić naciśnij klawisz Return na klawiaturze, aby rozpocząć wyszukiwanie. Ty może dodać przycisk „Prześlij” po połączeniu telefonu setSubmitButtonEnabled(true)
Zawężenie zapytania pod kątem sugestii wyszukiwania
Gdy włączasz sugestie wyszukiwania, użytkownicy zwykle muszą wybrać sugestie, ale mogą też sprecyzować sugerowane zapytanie. Obok każdej sugestii możesz dodać przycisk, który ją wstawia. w polu wyszukiwania w celu zawężenia wyszukiwania przez użytkownika, dzwoniąc pod setQueryRefinementEnabled(true)
Możliwość przełączania widoczności pola wyszukiwania
Domyślnie widżet wyszukiwania jest oznaczony ikoną co oznacza, że jest jest reprezentowana tylko przez ikonę wyszukiwania – lupę. Rozwija się do postaci powoduje wyświetlenie pola wyszukiwania po kliknięciu ikony przez użytkownika. Zgodnie z informacjami podanymi w poprzedniej sekcji Możesz na przykład domyślnie wyświetlać pole wyszukiwania, dzwoniąc, setIconifiedByDefault(false) Możesz też przełączyć wygląd widżetu wyszukiwania, dzwoniąc setIconified()

W klasie SearchView jest kilka innych interfejsów API, które umożliwiają dostosować widżet wyszukiwania. Jednak większość z nich jest używana tylko wtedy, gdy zajmuje się wszystkimi działaniami użytkownika samodzielnie, zamiast korzystać z systemu Android zapytań i sugestii wyszukiwania.

Korzystanie z widżetu i okna

Jeśli wstawisz widżet wyszukiwania na pasku aplikacji jako action view i włącz tak, by pojawiała się na pasku aplikacji, jeśli jest dość miejsca. android:showAsAction="ifRoom", czyli widżet wyszukiwania może nie są wyświetlane jako widok działań. Zamiast tego w rozszerzeniu może pojawić się pozycja menu. . Na przykład gdy Twoja aplikacja działa na mniejszym ekranie, na pasku aplikacji jest wystarczająca ilość miejsca, aby można było wyświetlić widżet wyszukiwania wraz z innymi działaniami elementów nawigacyjnych, tak więc element menu pojawia się w . Po umieszczeniu w rozszerzonym menu element działa jak zwykłe menu. nie zawiera widoku czynności (czyli widżetu wyszukiwania).

Aby temu zaradzić, pozycja menu, do której dołącza się widżet wyszukiwania, musi aktywować okno wyszukiwania, gdy użytkownik wybierze je z rozszerzonego menu. W tym celu zaimplementuj onOptionsItemSelected() do obsługi funkcji Wyszukiwarka i otwórz okno wyszukiwania, wywołując onSearchRequested()

Więcej informacji o tym, jak działają elementy na pasku aplikacji i jak postępować z nimi o tej sytuacji, zobacz Dodaj pasek aplikacji.

Dodaj wyszukiwanie głosowe

Do okna lub widżetu wyszukiwania możesz dodać funkcję wyszukiwania głosowego, wykonując te czynności: dodaj atrybut android:voiceSearchMode do wyszukiwarki konfiguracji. Spowoduje to dodanie przycisku wyszukiwania głosowego, który będzie uruchamiać pytanie głosowe. Gdy użytkownik skończy mówić, transkrypcja zapytania zostanie wysłana do aktywność, którą można przeszukiwać.

Widać to w tym przykładzie:

<?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>

Wartość showVoiceSearchButton jest wymagana, by można było włączyć obsługę głosu . Druga wartość, launchRecognizer, wskazuje, że przycisk wyszukiwania głosowego musi uruchamiać rozpoznawanie, które zwraca transkrypcję tekstu na aktywność, którą można przeszukiwać.

Możesz podać dodatkowe atrybuty określające działanie wyszukiwania głosowego, takich jak oczekiwany język i maksymalna liczba wyników do zwrócenia. Zobacz Więcej informacji znajdziesz w artykule o konfiguracji wyszukiwania. informacje o dostępnych atrybutach.

.

Dodaj sugestie wyszukiwania

Zarówno okno wyszukiwania, jak i widżet wyszukiwania mogą wyświetlać sugestie wyszukiwania wpisywany przez użytkownika przy użyciu systemu Android. System zarządza listę sugestii i obsługuje zdarzenie, gdy użytkownik wybierze sugestii.

Możesz podać 2 rodzaje sugestii wyszukiwania:

Ostatnie sugestie wyszukiwania zapytań
Te sugestie to słowa, które użytkownik wcześniej użył podczas wyszukiwania zapytania w Twojej aplikacji. Zobacz Dodawanie niestandardowe sugestie wyszukiwania.
Niestandardowe sugestie wyszukiwania
To są sugestie wyszukiwania, które przesyłasz z własnego źródła danych do: pomóż użytkownikom natychmiast wybrać szukaną pozycję z poprawną pisownią lub prawidłową pisownią . Patrz: Dodawanie niestandardowego wyszukiwania , znajdziesz więcej informacji.