Das Dreistrich-Menü SearchView
und die Aktionsleiste sind nur unter Android 3.0 und höher verfügbar. Für ältere Plattformen können Sie auf das Suchfeld 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
Wenn Sie das Suchdialogfeld einrichten möchten, müssen Sie zuerst in Ihrem Manifest angeben, dass Sie ältere Geräte unterstützen, aber Ihre App auf Android 3.0 oder höher ausrichten möchten. In diesem Fall verwendet Ihre Anwendung unter Android 3.0 oder höher automatisch die Aktionsleiste und auf älteren Geräten das traditionelle Menüsystem:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Suchdialogfeld für ältere Geräte bereitstellen
Wenn Sie das Suchfeld auf älteren Geräten aufrufen möchten, rufen Sie onSearchRequested()
auf, wenn ein Nutzer den Menüpunkt „Suchen“ aus dem Optionsmenü auswählt. Da auf Geräten mit Android 3.0 und höher das Symbol SearchView
in der Aktionsleiste angezeigt wird (wie in der ersten Lektion gezeigt), wird onOptionsItemSelected()
nur bei Versionen älter als 3.0 aufgerufen, wenn der Nutzer den Menüpunkt „Suchen“ 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-Buildversion zur Laufzeit prüfen
Prüfen Sie bei der Laufzeit die Geräteversion, um sicherzustellen, dass SearchView
auf älteren Geräten nicht verwendet wird. In unserem Beispielcode geschieht dies in der onCreateOptionsMenu()
-Methode:
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; }