Verbleibende Abwärtskompatibilität

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