Wir empfehlen die Verwendung des
SearchView
Widget als Element in der App-Leiste hinzufügen, um Suchfunktionen in Ihrer App bereitzustellen. Als
Elemente in der App-Leiste auswählen, können Sie SearchView
so definieren,
immer oder nur dann ausgeliefert werden, wenn genügend Platz ist. Sie können sie auch als
minimierbare Aktion, bei der das SearchView
als Symbol angezeigt wird
und nimmt dann die gesamte App-Leiste als Suchfeld ein,
tippt auf das Symbol.
SearchView zur App-Leiste hinzufügen
Um der App-Leiste ein SearchView
-Widget hinzuzufügen, erstellen Sie eine Datei in Ihrem
Projekt mit dem Namen res/menu/options_menu.xml
und fügen Sie den folgenden Code hinzu:
hinzufügen. Dieser Code definiert, wie das Suchelement erstellt wird, z. B. das Symbol
und den Titel des Artikels. Das Attribut collapseActionView
können Sie Ihr SearchView
so erweitern, dass es die gesamte App-Leiste einnimmt und
und bei Nichtgebrauch wieder zu einem normalen
App-Leistenelement minimiert werden. Aufgrund der
ist der Platz in der App-Leiste auf Mobiltelefonen begrenzt, empfehlen wir die Verwendung der
collapsibleActionView
-Attribut für einen besseren Nutzer
Nutzererfahrung.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu>
Wenn Sie die Barrierefreiheit eines Suchsymbols verbessern möchten, erstellen Sie ein
ic_search.xml
-Datei im Ordner /res/drawable
und
den folgenden Code enthalten:
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> </vector>
Maximieren Sie das XML-Menü, um SearchView
in der App-Leiste anzuzeigen
Ressource res/menu/options_menu.xml
im
onCreateOptionsMenu()
Methode Ihrer Aktivität:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) return true }
Beim Ausführen der App wird in etwa Folgendes generiert:
<ph type="x-smartling-placeholder">![Ein Bild, das einen leeren Bildschirm mit einem Suchsymbol in der oberen App-Leiste zeigt](https://developer.android.com/static/images/ui/searchview_1.png?authuser=9&hl=de)
Die SearchView
wird in der App-Leiste Ihrer App angezeigt, aber nicht
funktionsfähig sein. Wenn Sie auf das Suchsymbol tippen, erhalten Sie etwa Folgendes:
![Ein Bild, das die Suchansicht in Aktion zeigt](https://developer.android.com/static/images/ui/searchview_2.png?authuser=9&hl=de)
SearchView
in Aktion.
Damit SearchView
funktioniert, müssen Sie definieren, wie die
SearchView
verhält.
Suchkonfiguration erstellen
Eine Suche
Konfiguration gibt an, wie sich SearchView
verhält und
res/xml/searchable.xml
-Datei definiert ist. Eine Suchkonfiguration
muss mindestens ein android:label
-Attribut enthalten, das den
android:label
-Attribut des
<Anwendung>
oder <activity>
-Element in Ihrem Android-Manifest. Es empfiehlt sich jedoch auch,
android:hint
-Attribut, damit der Nutzer weiß, was er eingeben muss
in das Suchfeld ein.
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" />
Deklarieren Sie in der Manifestdatei Ihrer App ein
<meta-data>
-Element, das auf die Datei res/xml/searchable.xml
verweist. Deklarieren Sie die
-Element in einem <activity>
, in dem das Element angezeigt werden soll
SearchView
.
<activity android:name=".SearchResultsActivity" android:exported="false" android:label="@string/title_activity_search_results" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat.Light"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
Verknüpfen Sie in der von Ihnen erstellten Methode onCreateOptionsMenu()
der Suchkonfiguration mit SearchView
durch Aufrufen von
setSearchableInfo(SearchableInfo)
:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView val component = ComponentName(this, SearchResultsActivity::class.java) val searchableInfo = searchManager.getSearchableInfo(component) searchView.setSearchableInfo(searchableInfo) return true }
Der Aufruf an
getSearchableInfo()
erhält ein
SearchableInfo
-Objekt, das aus der XML-Datei für die Suchkonfiguration erstellt wird. Wenn die Suchanfrage
Konfiguration ist korrekt mit SearchView
und dem
der Nutzer eine Anfrage sendet, startet SearchView
eine Aktivität mit dem
ACTION_SEARCH
die Nutzerabsicht verstehen. Sie benötigen dann eine Aktivität, die nach diesem Intent filtern und den
Suchanfrage.
Suchbare Aktivität erstellen
Eine suchbare Aktivität filtert nach dem Intent ACTION_SEARCH
und
nach der Abfrage in einem Dataset sucht. Um eine durchsuchbare Aktivität zu erstellen,
Eine Aktivität Ihrer Wahl, um nach ACTION_SEARCH
zu filtern
Intent:
<activity android:name=".SearchResultsActivity" ... > ... <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> ... </activity>
Verarbeiten Sie in Ihren suchbaren Aktivitäten den Intent ACTION_SEARCH
wie folgt:
in Ihrem
onCreate()
.
Kotlin
class SearchResultsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search_results) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { val query = intent.getStringExtra(SearchManager.QUERY) Log.d("SEARCH", "Search query was: $query") } } }
Jetzt kann SearchView
die Anfrage des Nutzers annehmen und Ihren
durchsuchbare Aktivität mit dem Intent ACTION_SEARCH
.
Nachdem Sie die Suchanfrage erhalten haben, können Sie sie an die
ViewModel
, wo Sie sie auch in anderen Ebenen Ihres
Architektur zum Abrufen der anzuzeigenden Suchergebnisse.