Die SearchView und die Aktionsleiste sind nur unter Android 3.0 und höher 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
Um den Suchdialog einzurichten, müssen Sie zuerst in Ihrem Manifest deklarieren, dass Sie ältere Geräte unterstützen, aber Android 3.0 oder höhere Versionen als Ziel verwenden möchten. Wenn Sie dies tun, verwendet Ihre Anwendung automatisch die Aktionsleiste unter Android 3.0 oder höher und das herkömmliche Menüsystem auf älteren Geräten:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Suchdialogfeld für ältere Geräte bereitstellen
Um das Suchfeld auf älteren Geräten aufzurufen, rufen Sie onSearchRequested() auf, wenn ein Nutzer den Menüpunkt „Suchen“ im Optionsmenü auswählt. Da auf Geräten mit Android 3.0 und höher das SearchView in der Aktionsleiste angezeigt wird (wie in der ersten Lektion gezeigt), wird onOptionsItemSelected() nur bei Versionen vor 3.0 aufgerufen, wenn der Nutzer das Suchmenüelement 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 zur Laufzeit die Geräteversion, um sicherzustellen, dass SearchView auf älteren Geräten nicht auf nicht unterstützte Weise 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; }