Verbleibende Abwärtskompatibilität

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zum Hinzufügen einer Suchfunktion in Compose

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;
}