Verbleibende Abwärtskompatibilität

SearchView und Aktionsleiste sind erst ab Android 3.0 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

Gib zum Einrichten des Suchdialogfelds zuerst in deinem Manifest an, dass du zwar ältere Geräte unterstützen, aber auf Android 3.0 oder höher ausrichten möchtest. In diesem Fall verwendet Ihre Anwendung unter Android 3.0 oder höher automatisch die Aktionsleiste und auf älteren Geräten das herkömmliche Menüsystem:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<application>
...

Dialogfeld für die Suche für ältere Geräte bereitstellen

Zum Aufrufen des Suchdialogfelds auf älteren Geräten kannst du onSearchRequested() immer dann aufrufen, wenn ein Nutzer den entsprechenden Eintrag im Optionsmenü auswählt. Da auf Geräten mit Android 3.0 und höher SearchView in der Aktionsleiste angezeigt wird (wie in der ersten Lektion gezeigt), wird nur in Versionen, die älter als 3.0 sind, onOptionsItemSelected() aufgerufen, wenn 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üfen Sie während der Laufzeit die Geräteversion, um sicherzugehen, dass SearchView auf älteren Geräten nicht unterstützt wird. In unserem Beispielcode geschieht dies in der 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;
}