Verbleibende Abwärtskompatibilität

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfahren Sie, wie Sie eine Suchfunktion in Compose hinzufügen.

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