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 standardowaEditText
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:
- Zadeklaruj aktywność, aby zaakceptować intencję
ACTION_SEARCH
w<intent-filter>
. . - 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ć:
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 orazSQLiteDatabase
, 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"
naandroid:launchMode
, wtedy aktywność do przeszukiwania otrzymuje intencjęACTION_SEARCH
z wywołaniem doonNewIntent(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ównoonCreate()
ionNewIntent()
mogą go wykonać.Gdy system wywoła metodę
onNewIntent(Intent)
, aktywność nie jest zrestartowano, więcgetIntent()
zwraca tę samą intencję, która została odebrana za pomocą funkcjionCreate()
. Właśnie dlatego trzeba zadzwonićsetIntent(Intent)
wewnątrzonNewIntent(Intent)
: aby intencja zapisana przez metodę aktywność będzie aktualizowana na wypadek, gdyby w przyszłości zadzwonił(a) pod numergetIntent()
.
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
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ącsetIconified()
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.