Quando estiver tudo pronto para adicionar a funcionalidade de pesquisa ao app, o Android vai ajudar você implementar a interface do usuário com uma caixa de diálogo de pesquisa que aparece na parte superior da janela de atividades ou de um widget de pesquisa que você pode inserir no seu layout. A caixa de diálogo e o widget podem fornecer a consulta de pesquisa do usuário a um uma atividade específica no seu aplicativo. Dessa forma, o usuário pode iniciar uma pesquisa a partir de qualquer atividade em que a caixa de diálogo ou o widget de pesquisa está disponível e o sistema é iniciado a atividade apropriada para realizar a pesquisa e apresentar resultados.
Outros recursos disponíveis para a caixa e o widget de pesquisa incluem:
- Pesquisa por voz
- Sugestões de pesquisa com base em consultas recentes
- Sugestões de pesquisa que correspondem aos resultados reais nos dados do app
Este documento mostra como configurar seu app para oferecer uma interface de pesquisa assistida pelo sistema Android a entregar consultas de pesquisa, usando na caixa de diálogo ou no widget de pesquisa.
Recursos relacionados:
- Ícones do Material Design (link em inglês)
Noções básicas
Antes de começar, decida se você quer implementar a interface de pesquisa usando a caixa de diálogo ou o widget de pesquisa. Eles fornecem a mesma pesquisa mas de formas ligeiramente diferentes:
- A caixa de pesquisa é um componente de IU controlado pela
no sistema Android. Quando ativada pelo usuário, a caixa de diálogo de pesquisa aparece
no topo da atividade.
O sistema Android controla todos os eventos na caixa de pesquisa. Quando o usuário envia uma consulta, o sistema entrega a consulta à atividade que você especificar para lidar com as pesquisas. A caixa de diálogo também pode oferecer recursos sugestões enquanto o usuário digita.
- O widget de pesquisa é uma instância do
SearchView
que você pode em qualquer lugar do layout. Por padrão, o widget de pesquisa se comporta como padrãoEditText
e não faz nada, mas é possível configurá-lo para que o Android sistema lida com todos os eventos de entrada, envia as consultas para os atividade e fornece sugestões de pesquisa, assim como o caixa de diálogo.
Quando o usuário faz uma pesquisa na caixa de diálogo ou widget de pesquisa,
o sistema cria
Intent
e
que armazena a consulta do usuário nele. O sistema então inicia a atividade que você
declarar para processar pesquisas (a "atividade de pesquisa") e a entrega
o intent. Para configurar seu app para esse tipo de pesquisa assistida, você precisa do
seguinte:
- Uma configuração de pesquisa
- Um arquivo XML que define algumas configurações para a caixa ou o widget de pesquisa. Ele inclui configurações de recursos como pesquisa por voz, sugestão de pesquisa, e dica para a caixa de pesquisa.
- Uma atividade de pesquisa
- O
Activity
que recebe a consulta de pesquisa, pesquisa seus dados e exibe a resultados.- Uma interface de pesquisa, fornecida por um dos seguintes:
- Caixa de diálogo de pesquisa
- Por padrão, a caixa de pesquisa fica oculta. Ele aparece na parte superior tela ao ligar
onSearchRequested()
quando o usuário toca no botão Pesquisar.- Um
SearchView
widget- O uso do widget de pesquisa permite colocar a caixa de pesquisa em qualquer lugar do seu atividade, inclusive como uma visualização de ações na barra de apps.
- Um
O restante deste documento mostra como criar a configuração de pesquisa atividade de pesquisa e como implementar uma interface de pesquisa com o caixa de diálogo ou widget de pesquisa.
Criar uma configuração pesquisável
A primeira coisa que você precisa é de um arquivo XML chamado
configuração de pesquisa.
Ele configura certos aspectos da IU da caixa ou do widget de pesquisa e define como
como as sugestões e a pesquisa por voz. Tradicionalmente, esse arquivo
chamado searchable.xml
e precisa ser salvo na pasta res/xml/
do projeto.
O arquivo de configuração de pesquisa precisa incluir o parâmetro
<searchable>
elemento como seu nó raiz e especificar um ou mais atributos, como mostrado no
exemplo a seguir:
<?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>
O atributo android:label
é o único atributo obrigatório. Ela
aponta para um recurso de string, que precisa ser o nome do app. Este marcador não está
visível para o usuário até que você ative as sugestões de pesquisa para a Caixa de pesquisa rápida, em
o ponto em que o marcador fica visível na lista de itens pesquisáveis no sistema;
configurações.
Embora não seja obrigatório, recomendamos que você sempre inclua o parâmetro
O atributo android:hint
, que fornece uma string de dica na pesquisa
antes de os usuários inserirem uma consulta. A dica é importante porque fornece
pistas importantes para os usuários sobre o que eles podem pesquisar.
O elemento <searchable>
aceita vários outros atributos.
No entanto, você não precisa da maioria dos atributos até adicionar recursos como
sugestões de pesquisa e
pesquisa por voz. Para informações detalhadas sobre o
de configuração de pesquisa, consulte a
Configuração de pesquisa
documento de referência.
Criar uma atividade de pesquisa
Uma atividade de pesquisa é a Activity
no app que executa
pesquisa com base em uma string de consulta e apresenta os resultados da pesquisa.
Quando o usuário executa uma pesquisa na caixa de diálogo ou no widget de pesquisa, o sistema
inicia sua atividade de pesquisa e envia a consulta de pesquisa em um
Intent
com o
ACTION_SEARCH
à ação. Sua atividade de pesquisa recupera a consulta do
QUERY
e pesquisa seus dados e apresenta os resultados.
Como é possível incluir a caixa de diálogo ou o widget de pesquisa em qualquer outra atividade no seu app, o sistema precisa saber qual atividade é sua atividade de pesquisa. para que ele possa exibir corretamente a consulta de pesquisa. Portanto, primeiro declare sua função atividade no arquivo de manifesto do Android.
Declarar uma atividade de pesquisa
Se você ainda não tiver uma Activity
, crie uma que seja executada
pesquisa e apresenta resultados. Não é necessário implementar a função
funcionalidade, basta criar uma atividade que você pode declarar no arquivo
manifesto do aplicativo. Dentro do arquivo
<activity>
, faça o seguinte:
- Declare a atividade para aceitar a intent
ACTION_SEARCH
em uma<intent-filter>
. - Especifique a configuração de pesquisa a ser usada em um
<meta-data>
.
Isso é mostrado neste exemplo:
<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>
O elemento <meta-data>
precisa incluir o
Atributo android:name
com um valor de
"android.app.searchable"
e android:resource
com uma referência ao arquivo de configuração pesquisável. Na
exemplo anterior, ele se refere ao res/xml/searchable.xml
.
Realizar uma pesquisa
Depois de declarar sua atividade de pesquisa no manifesto, siga estas para realizar uma pesquisa na sua atividade de pesquisa:
Receber a consulta
Quando um usuário executa uma pesquisa na caixa de diálogo ou no widget de pesquisa, o sistema
inicia sua atividade de pesquisa e envia a ela um ACTION_SEARCH
intenção. Essa intent carrega a consulta de pesquisa na string QUERY
extra. Verifique essa intent quando a atividade iniciar e extraia a string.
Por exemplo, veja como obter a consulta de pesquisa quando seu
início da atividade:
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); } }
A string QUERY
sempre é incluída no
ACTION_SEARCH
. No exemplo anterior, a consulta
recuperados e passados para um método doMySearch()
local em que o
quando a operação de pesquisa real é concluída.
Pesquisar seus dados
O processo de armazenamento e pesquisa de dados é exclusivo do app. Você pode armazenar e pesquisar seus dados de várias maneiras, mas este documento não mostra como fazer isso. Considere como você armazena e pesquisa seus dados de acordo com suas necessidades e dados . Confira algumas dicas que você pode aplicar:
- Caso seus dados estejam armazenados em um banco de dados SQLite no dispositivo, realizar uma
Pesquisa de texto completo: usando FTS3 em vez de uma
LIKE
. pode fornecer uma pesquisa mais robusta em dados de texto e pode a produzir resultados significativamente mais rápidos. Consulte sqlite.org para informações sobre o FTS3 e asSQLiteDatabase
para informações sobre o SQLite no Android. - Se seus dados estão armazenados on-line, o desempenho da pesquisa percebido pode
ser inibido pela conexão de dados do usuário. Você pode querer exibir
indicador de progresso até que a pesquisa seja retornada. Consulte
android.net
para consultar uma referência das APIs de rede eProgressBar
para mais informações sobre como exibir um indicador de progresso.
Apresentar os resultados
Independentemente de onde os dados estão e de como são pesquisados, recomendamos que
você retorna os resultados da pesquisa para sua atividade de pesquisa com um
Adapter
: Isso
é possível apresentar todos os resultados da pesquisa
RecyclerView
:
Se seus dados vierem de uma consulta ao banco de dados SQLite, você pode aplicar os resultados a uma
RecyclerView
usando um
CursorAdapter
.
Se seus dados vêm em um formato diferente, você pode criar uma extensão do
BaseAdapter
:
Um Adapter
vincula cada item de um conjunto de dados a uma
objeto View
. Quando
o Adapter
é aplicado a um RecyclerView
, cada parte
de dados é inserida como uma visualização individual na lista. Adapter
é
apenas uma interface. Portanto, implementações como
CursorAdapter
: para vincular dados de uma
Cursor
—são
necessários. Se nenhuma das implementações existentes funcionar para seus dados, será possível
implemente um de BaseAdapter
.
Usar a caixa de pesquisa
A caixa de pesquisa oferece uma caixa de pesquisa flutuante na parte superior da tela, com o ícone do app à esquerda. A caixa de diálogo pode oferecer sugestões de pesquisa conforme o usuário digita. Quando o usuário faz uma pesquisa, o sistema envia o resultado consulta para uma atividade de pesquisa que realiza a pesquisa.
Por padrão, a caixa de diálogo de pesquisa fica sempre oculta até o usuário ativá-la.
Seu app pode ativar a caixa de pesquisa chamando
onSearchRequested()
: No entanto, esse método não funciona até que você
ativar a caixa de diálogo de pesquisa para a atividade.
Para que a caixa de diálogo de pesquisa realize pesquisas, indique ao sistema quais
a atividade de pesquisa precisa receber consultas da caixa de diálogo de pesquisa. Para
exemplo, na seção anterior sobre
criar uma atividade pesquisável, uma atividade pesquisável
a atividade SearchableActivity
é criada. Se você quiser uma
atividade separada, como uma chamada OtherActivity
, para mostrar
caixa de diálogo de pesquisa e entregar pesquisas para SearchableActivity
, declare
no manifesto de que SearchableActivity
é a atividade de pesquisa;
para usar na caixa de pesquisa em OtherActivity
.
Para declarar a atividade de pesquisa para uma caixa de diálogo de pesquisa de uma atividade, adicione um
<meta-data>
no elemento da respectiva atividade
<activity>
. O <meta-data>
deve incluir o atributo android:value
que especifica o
nome da classe da atividade pesquisável e o atributo android:name
com um valor de "android.app.default_searchable"
.
Por exemplo, esta é a declaração para uma atividade pesquisável,
SearchableActivity
e outra atividade,
OtherActivity
, que usa SearchableActivity
para
realiza pesquisas executadas a partir da caixa de pesquisa:
<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>
Como OtherActivity
agora inclui um
Elemento <meta-data>
para declarar qual atividade de pesquisa será
usar para pesquisas, a atividade ativa a caixa de diálogo de pesquisa. Embora o usuário seja
nesta atividade, o método onSearchRequested()
ativa
caixa de diálogo de pesquisa. Quando o usuário executa a pesquisa, o sistema inicia
SearchableActivity
e entrega o ACTION_SEARCH
intenção.
Se você quiser que todas as atividades do app ofereçam a caixa de pesquisa, insira
o elemento <meta-data>
anterior como filho do
<application>
em vez de cada <activity>
. Dessa forma, todas as atividades
herda o valor, fornece a caixa de diálogo de pesquisa e envia as pesquisas para o
mesma atividade de pesquisa. Se você tem várias atividades pesquisáveis, é possível
substituir a atividade de pesquisa padrão, posicionando uma
<meta-data>
em atividades individuais.
Com a caixa de pesquisa ativada para suas atividades, o app está pronto para realizar pesquisas.
Invocar a caixa de diálogo de pesquisa
Embora alguns dispositivos forneçam um botão de pesquisa dedicado, o comportamento da
pode variar entre dispositivos, e muitos dispositivos não fornecem uma pesquisa
sequer. Portanto, ao usar a caixa de diálogo de pesquisa, forneça um botão de pesquisa
na IU que ativa a caixa de pesquisa chamando
onSearchRequested()
:
Por exemplo, adicione um botão de pesquisa
menu de opções ou layout da interface
que chama onSearchRequested()
.
Você também pode ativar o recurso "digitar para pesquisar" que ativa a funcionalidade de
caixa de diálogo de pesquisa
quando o usuário começa a digitar no teclado. As teclas são
inserido na caixa de diálogo de pesquisa. Você pode ativar a digitação por pesquisa em sua atividade
chamando
setDefaultKeyMode
— ou
DEFAULT_KEYS_SEARCH_LOCAL
– durante
das suas atividades
onCreate()
.
Impacto da caixa de pesquisa no ciclo de vida da atividade
A caixa de pesquisa é uma
Dialog
que flutua
na parte superior da tela. Como ele não causa mudanças na pilha de atividades,
quando a caixa de diálogo de pesquisa é exibida, não há métodos de ciclo de vida, como
onPause()
—são
chamou. Sua atividade perde o foco de entrada, porque o foco de entrada é dado ao
caixa de diálogo de pesquisa.
Se você quiser receber uma notificação quando a caixa de diálogo de pesquisa for ativada, modifique a
onSearchRequested()
. Quando o sistema chama esse método, ele
é uma indicação de que sua atividade perde o foco de entrada para a caixa de diálogo de pesquisa, então
faça o que for adequado para o evento, como pausar um jogo. A menos que
você está transmitindo contexto de pesquisa
dados, discutidos em outra seção deste documento, finalizem o
chamando a implementação da superclasse:
Kotlin
override fun onSearchRequested(): Boolean { pauseSomeStuff() return super.onSearchRequested() }
Java
@Override public boolean onSearchRequested() { pauseSomeStuff(); return super.onSearchRequested(); }
Se o usuário cancelar a pesquisa tocando no botão "Voltar", a caixa de diálogo de pesquisa
é fechado e a atividade recupera o foco de entrada. Você pode se registrar para receber notificações
quando a caixa de diálogo de pesquisa é fechada
setOnDismissListener()
,
setOnCancelListener()
,
ou ambos. Você só precisa registrar
OnDismissListener
,
porque é chamado sempre que a caixa de pesquisa é fechada. A
OnCancelListener
só se refere a eventos nos quais o usuário sai explicitamente da caixa de diálogo de pesquisa. Portanto,
ele não é chamado quando uma pesquisa é executada. Quando a pesquisa é executada, o
a caixa de pesquisa desaparece automaticamente.
Se a atividade atual não for a atividade de pesquisa, a atividade normal
eventos de ciclo de vida da atividade são acionados quando o usuário executa
pesquisa: a atividade atual recebe onPause()
, conforme descrito
em Introdução à
atividades. No entanto, se a atividade atual for a atividade de pesquisa,
uma destas duas situações acontece:
- Por padrão, a atividade de pesquisa recebe o
ACTION_SEARCH
com uma chamada paraonCreate()
, e uma nova instância da atividade é levada para a parte superior da atividade pilha. Há agora duas instâncias da sua atividade de pesquisa na pilha de atividades. Tocar no botão "Voltar" leva você de volta para a pilha de atividades instância da atividade de pesquisa, em vez de sair do campo atividades. - Se você definir
android:launchMode
como"singleTop"
, a atividade de pesquisa recebe a intentACTION_SEARCH
com uma chamada paraonNewIntent(Intent)
, transmitindo a nova intentACTION_SEARCH
. Por exemplo, veja como você pode lidar com esse caso, em que o modo de inicialização da atividade de pesquisa é"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); } }
Em comparação com o código de exemplo na seção sobre realizar uma pesquisa, todo o código para lidar com intenção de pesquisa agora está no método
handleIntent()
, de modo que ambosonCreate()
eonNewIntent()
podem executá-la.Quando o sistema chama
onNewIntent(Intent)
, a atividade não é reiniciada a partir de agora.getIntent()
retorna a mesma intent recebida comonCreate()
. É por isso que você deve chamarsetIntent(Intent)
dentro deonNewIntent(Intent)
: para que a intent salva pelo a atividade será atualizada caso você chamegetIntent()
no futuro.
O segundo cenário, usando o modo de inicialização "singleTop"
, geralmente é
porque, depois que uma pesquisa é feita, o usuário pode realizar
pesquisas e não quiser que o aplicativo crie várias instâncias do
atividade de pesquisa. Recomendamos que você defina sua atividade de pesquisa como
Modo de inicialização do "singleTop"
no manifesto do app, conforme mostrado no
exemplo a seguir:
<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>
Transmitir dados de contexto de pesquisa
Em alguns casos, você pode fazer os refinamentos necessários na consulta de pesquisa dentro
a atividade de pesquisa para cada pesquisa feita. No entanto, se você quiser refinar
seus critérios de pesquisa com base na atividade em que o usuário está realizando uma
é possível fornecer dados adicionais na intent que o sistema envia para
sua atividade de pesquisa. Você pode transmitir os dados adicionais no
APP_DATA
Bundle
, que é
incluído na intent ACTION_SEARCH
.
Para passar esse tipo de dados à sua atividade de pesquisa, substitua a propriedade
Método onSearchRequested()
para a atividade em que o usuário pode
realizar uma pesquisa, criar um Bundle
com os dados adicionais e
ligar
startSearch()
para ativar a caixa de pesquisa. Exemplo:
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; }
Retornar verdadeiro indica que você manipula esse evento de retorno de chamada e
chame startSearch()
para ativar a caixa de pesquisa. Depois que o usuário
envia uma consulta, ela é entregue à sua atividade de pesquisa junto com os dados
adicionar. É possível extrair os dados extras do APP_DATA
Bundle
para refinar a pesquisa, conforme mostrado no exemplo a seguir:
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); }
Usar o widget de pesquisa
O widget oferece a mesma funcionalidade que a caixa de pesquisa. Ela inicia a atividade adequada quando o usuário executa uma pesquisa e pode fornecer sugestões de pesquisa e realizar pesquisa por voz. Se não for uma opção colocar o widget de pesquisa na barra de apps, você pode colocar o widget em algum lugar no layout da atividade.
Configurar o widget de pesquisa
Depois de criar um
configuração de pesquisa e uma
atividade pesquisável, ativar a pesquisa assistida
para cada SearchView
chamando
setSearchableInfo()
e passando o objeto SearchableInfo
que representa sua
configuração pesquisável.
Para ter uma referência ao SearchableInfo
, chame
getSearchableInfo()
ativado
SearchManager
Por exemplo, se você estiver usando uma SearchView
como uma visualização de ação em
a barra de aplicativos, ative o widget durante a
onCreateOptionsMenu()
do Cloud Storage, conforme mostrado no exemplo a seguir:
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; }
O widget de pesquisa está configurado, e o sistema exibe as consultas de pesquisa à sua atividade de pesquisa. Também é possível ativar sugestões de pesquisa para o widget de pesquisa.
Para mais informações sobre as visualizações de ações na barra de apps, consulte Usar visualizações e ações de ação provedores.
Outros recursos do widget de pesquisa
O widget SearchView
fornece alguns recursos adicionais que você
você pode querer:
- Um botão de envio
- Por padrão, não há um botão para enviar uma consulta de pesquisa. Por isso, o usuário precisa
pressione a tecla Enter no teclado para iniciar uma pesquisa. Você
é possível adicionar um "envio" chamando
setSubmitButtonEnabled(true)
: - Refinamento de consulta para sugestões de pesquisa
- Quando você ativa as sugestões de pesquisa, normalmente espera-se que os usuários selecionem um
mas também pode querer refinar a consulta de pesquisa sugerida.
Você pode adicionar um botão ao lado de cada sugestão que a insere
na caixa de pesquisa para que o usuário possa refinar a pesquisa, chamando
setQueryRefinementEnabled(true)
: - A capacidade de alternar a visibilidade da caixa de pesquisa
- Por padrão, o widget de pesquisa é "iconificado", o que significa que é
representada apenas por um ícone de pesquisa, uma lupa. Ele se expande para
mostrar a caixa de pesquisa quando o usuário tocar no ícone. Conforme mostrado no
Por exemplo, é possível mostrar a caixa de pesquisa por padrão chamando
setIconifiedByDefault(false)
: Também é possível alternar a aparência do widget de pesquisa chamandosetIconified()
:
Há várias outras APIs na classe SearchView
que permitem
a personalizar o widget de pesquisa. No entanto, a maioria delas é usada apenas quando você
lide com todas as entradas do usuário por conta própria, em vez de usar o sistema Android para entregar
consultas de pesquisa e sugestões de pesquisa.
Usar o widget e a caixa de diálogo
Se você inserir o widget de pesquisa na barra de apps como um
visualização de ação e ativar
que ele apareça na barra de apps se houver espaço, definindo
android:showAsAction="ifRoom"
, o widget de pesquisa poderá
não aparecem como uma visualização de ação. Em vez disso, um item de menu
pode aparecer no menu flutuante
. Por exemplo, quando seu app for executado em uma tela menor, pode não haver
espaço suficiente na barra de apps para exibir o widget da Pesquisa com outras ações
ou elementos de navegação, para que o item de menu apareça no menu flutuante
. Quando colocado no menu flutuante, o item funciona como um menu comum
e não exibe a visualização de ação, ou seja, o widget de pesquisa.
Para lidar com essa situação, o item de menu ao qual você anexa o widget de pesquisa
precisa ativar a caixa de diálogo de pesquisa quando o usuário a selecionar no menu flutuante.
Para que isso aconteça, implemente
onOptionsItemSelected()
para gerenciar a "Pesquisa" e abrir a caixa de diálogo de pesquisa chamando
onSearchRequested()
.
Para mais informações sobre como os itens na barra de apps funcionam e como lidar com eles essa situação, consulte Adicionar a barra de apps.
Adicionar pesquisa por voz
Para adicionar a funcionalidade de pesquisa por voz à caixa ou ao widget de pesquisa, faça o seguinte:
adicionando o atributo android:voiceSearchMode
à sua campanha
configuração do Terraform. Isso adiciona um botão de pesquisa por voz que inicia uma solicitação por voz.
Quando o usuário termina de falar, a consulta de pesquisa transcrita é enviada para o seu
atividade de pesquisa.
Isso é mostrado neste exemplo:
<?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>
O valor showVoiceSearchButton
é necessário para ativar a voz
pesquisa. O segundo valor, launchRecognizer
, especifica que o
botão de pesquisa por voz precisa iniciar um reconhecedor que retorne o
texto transcrito para a atividade pesquisável.
Você pode fornecer atributos adicionais para especificar o comportamento da pesquisa por voz, como o idioma esperado e o número máximo de resultados a serem retornados. Consulte a referência de Configuração de pesquisa para mais informações sobre os atributos disponíveis.
.Adicionar sugestões de pesquisa
Tanto a caixa quanto o widget de pesquisa podem fornecer sugestões de pesquisa conforme o usuário digita, com a ajuda do sistema Android. O sistema gerencia a lista de sugestões e processa o evento quando o usuário seleciona sugestão.
Você pode fornecer dois tipos de sugestões de pesquisa:
- Sugestões de pesquisa de consulta recentes
- Essas sugestões são palavras que o usuário usou anteriormente como pesquisa consultas em seu aplicativo. Consulte Adicionar sugestões de pesquisa personalizadas para mais informações.
- Sugestões de pesquisa personalizadas
- São sugestões de pesquisa que você fornece da sua própria fonte de dados para ajudam os usuários a selecionar imediatamente a ortografia ou o item correto que estão pesquisando pelas quais Consulte Adicionar pesquisa personalizada sugestões para mais informações.