Das SearchView
und die Aktionsleiste sind nur unter Android 3.0 und
. Wenn ältere Plattformen unterstützt werden sollen, können Sie auf das Suchdialogfeld zurückgreifen. Das Dialogfeld für die Suche ist ein
vom System bereitgestellte Benutzeroberfläche, die beim Aufrufen
über Ihre Anwendung gelegt wird.
Mindest- und Ziel-API-Level festlegen
Wenn du das Dialogfeld für die Suche einrichten möchtest, musst du zuerst in deinem Manifest deklarieren, dass ältere Browser unterstützt werden sollen Geräte, aber Sie möchten eine Ausrichtung auf Android 3.0 oder höher vornehmen. Wenn Sie dies tun, wird Ihre Anwendung verwendet unter Android 3.0 oder höher automatisch die Aktionsleiste und das herkömmliche Menüsystem auf Ältere Geräte:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Suchdialogfeld für ältere Geräte bereitstellen
Zum Aufrufen des Suchdialogfelds auf älteren Geräten musst du immer onSearchRequested()
aufrufen, wenn ein Nutzer die Suche auswählt
aus dem Optionsmenü. Da Geräte mit Android 3.0 und höher
SearchView
in der Aktionsleiste (wie in der ersten Lektion gezeigt), nur Versionen
älter als 3.0: Rufen Sie onOptionsItemSelected()
auf, wenn die
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üfe zur Laufzeit die Geräteversion, um sicherzustellen, dass SearchView
auf älteren Geräten nicht unterstützt wird. In unserem Beispielcode geschieht dies
die 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; }