Pozostała zgodność wsteczna

Wypróbuj tworzenie wiadomości
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak dodać funkcję wyszukiwania w oknie tworzenia wiadomości.

Przyciski SearchView i pasek czynności są dostępne tylko w Androidzie 3.0 lub nowszym. Aby obsługiwać starsze platformy, możesz użyć okna wyszukiwania. Okno wyszukiwania to interfejs użytkownika udostępniany przez system, który po wywołaniu nakłada się na Twoją aplikację.

Ustawianie minimalnego i docelowego poziomu interfejsu API

Aby skonfigurować okno wyszukiwania, najpierw oświadcz w manifeście, że chcesz obsługiwać starsze urządzenia, ale kierować reklamy na urządzenia z Androidem 3.0 lub nowszym. W efekcie aplikacja automatycznie używa paska czynności na Androidzie 3.0 lub nowszym, a na starszych urządzeniach korzysta z tradycyjnego systemu menu:

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

<application>
...

Okno wyszukiwania na starszych urządzeniach

Aby wywołać okno wyszukiwania na starszych urządzeniach, wywołaj funkcję onSearchRequested(), gdy użytkownik wybierze pozycję menu wyszukiwania z menu opcji. Na urządzeniach z Androidem 3.0 lub nowszym na pasku czynności wyświetla się przycisk SearchView (jak pokazano w pierwszej lekcji), więc tylko wersje starsze niż 3.0 wywołują funkcję onOptionsItemSelected(), gdy użytkownik wybierze element menu wyszukiwania.

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

Sprawdzanie wersji Android Build w czasie wykonywania

Podczas działania aplikacji sprawdź wersję urządzenia, aby upewnić się, że na starszych urządzeniach nie dochodzi do nieobsługiwanego użycia funkcji SearchView. W naszym przykładowym kodzie odbywa się to w metodie 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;
}