Ho impostato un SearchWidget come descritto nello Android API Guide. Visualizza correttamente un'icona a forma di lente di ingrandimento nella barra delle azioni e se faccio clic su di essa, avvia il widget di ricerca all'interno della barra delle azioni (un campo di input con uno sfondo scuro).Mostra SearchWidget in ActionBar se l'utente preme il pulsante di ricerca del dispositivo
Tuttavia, se si preme il pulsante di ricerca del dispositivo virtuale, viene avviato un campo di ricerca diverso: ha uno sfondo bianco e non richiama i metodi di callback specificati.
così ho aggiunto questo per la mia classe MainActivity:
public boolean onSearchRequested() {
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setIconified(!searchView.isIconified());
return false;
}
Il set up del widget di ricerca è esattamente lo stesso che è descritto nella documentazione:
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new CustomSearchQueryTextListener());
mio searchable.xml :
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name">
</searchable>
E AndroidManifest.xml:
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:uiOptions="splitActionBarWhenNarrow" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
Il motivo per cui ho provato la setIconfied() il metodo è che nel API Android Guida si dice in "La possibilità di attivare o disattivare la visibilità casella di ricerca":
"Per impostazione predefinita, il widget di ricerca è "iconificato", ovvero è rappresentato solo da un'icona di ricerca (una lente di ingrandimento) e si espande in mostra la casella di ricerca quando l'utente lo tocca. Come mostrato sopra, è possibile mostrare la casella di ricerca per impostazione predefinita, chiamando setIconifiedByDefault (false). È inoltre possibile attivare o disattivare la ricerca widget di aspetto chiamando setIconified() "
Ho anche provato a chiamare startSearch("", false, null, false);
ma questo fa apparire lo stesso campo di ricerca con lo sfondo bianco
Quindi la mia domanda è..: È possibile avviare il widget di ricerca all'interno della barra delle azioni se l'utente preme il pulsante di ricerca del dispositivo, ovvero peform esattamente la stessa azione come se si fa clic sulla voce del menu di ricerca?