SearchView
und Aktionsleiste sind erst ab Android 3.0 verfügbar. Zur Unterstützung älterer Plattformen können Sie auf das Suchdialogfeld zurückgreifen. Das Suchdialogfeld ist eine vom System bereitgestellte Benutzeroberfläche, die beim Aufrufen über Ihrer Anwendung eingeblendet wird.
Mindest- und Ziel-API-Level festlegen
Gib zum Einrichten des Suchdialogfelds zuerst in deinem Manifest an, dass du zwar ältere Geräte unterstützen, aber auf Android 3.0 oder höher ausrichten möchtest. In diesem Fall verwendet Ihre Anwendung unter Android 3.0 oder höher automatisch die Aktionsleiste und auf älteren Geräten das herkömmliche Menüsystem:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Dialogfeld für die Suche für ältere Geräte bereitstellen
Zum Aufrufen des Suchdialogfelds auf älteren Geräten kannst du onSearchRequested()
immer dann aufrufen, wenn ein Nutzer den entsprechenden Eintrag im Optionsmenü auswählt. Da auf Geräten mit Android 3.0 und höher SearchView
in der Aktionsleiste angezeigt wird (wie in der ersten Lektion gezeigt), wird nur in Versionen, die älter als 3.0 sind, onOptionsItemSelected()
aufgerufen, wenn der Nutzer den Eintrag im Suchmenü auswählt.
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.search -> { onSearchRequested() true } else -> false } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); return true; default: return false; } }
Android-Build-Version zur Laufzeit prüfen
Prüfen Sie während der Laufzeit die Geräteversion, um sicherzugehen, dass SearchView
auf älteren Geräten nicht unterstützt wird. In unserem Beispielcode geschieht dies in der Methode onCreateOptionsMenu()
:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager (menu.findItem(R.id.search).actionView as SearchView).apply { setSearchableInfo(searchManager.getSearchableInfo(componentName)) setIconifiedByDefault(false) } } return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); } return true; }