سازگار با نسخه قدیمی باقی می‌ماند

امتحان کردن روش Compose
Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه افزودن عملکرد جستجو در Compose آشنا شوید.

‫SearchView و نوار اقدام فقط در Android نسخه ۳.۰ و بالاتر دردسترس است. برای پشتیبانی از پلاتفرم‌های قدیمی‌تر، می‌توانید به کادر گفتگوی جستجو برگردید. گفتگوی جستجو یک واسط کاربر ارائه‌شده توسط سیستم است که هنگام فراخوانی روی برنامه شما قرار می‌گیرد.

تنظیم سطوح میانای برنامه‌سازی کاربردی هدف و حداقل

برای راه‌اندازی کادر گفتگوی جستجو، ابتدا در مانیفست خود اعلام کنید که می‌خواهید از دستگاه‌های قدیمی‌تر پشتیبانی کنید، اما می‌خواهید Android نسخه ۳.۰ یا بالاتر را هدف قرار دهید. وقتی این کار را انجام می‌دهید، برنامه‌تان به‌طور خودکار از نوار اقدام در Android نسخه ۳.۰ یا بالاتر استفاده می‌کند و از سیستم منو سنتی در دستگاه‌های قدیمی‌تر استفاده می‌کند:

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

<application>
...

ارائه کادر گفتگوی جستجو برای دستگاه‌های قدیمی‌تر

برای فراخوانی کادر گفتگوی جستجو در دستگاه‌های قدیمی‌تر، هرگاه کاربر گزینه منوِ جستجو را از منوِ گزینه‌ها انتخاب کرد، onSearchRequested() را فراخوانی کنید. چون دستگاه‌های Android 3.0 و بالاتر SearchView را در نوار اقدام نشان می‌دهند (همان‌طور که در درس اول نشان داده شد)، فقط نسخه‌های قدیمی‌تر از 3.0 onOptionsItemSelected() را وقتی کاربر مورد منو جستجو را انتخاب می‌کند فراخوانی می‌کنند.

کاتلین

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.search -> {
            onSearchRequested()
            true
        }
        else -> false
    }
}

جاوا

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}

بررسی نسخه ساخت Android در زمان اجرا

در زمان اجرا، نسخه دستگاه را بررسی کنید تا مطمئن شوید که استفاده پشتیبانی‌نشده از SearchView در دستگاه‌های قدیمی‌تر رخ نمی‌دهد. در کد نمونه ما، این اتفاق در روش onCreateOptionsMenu() رخ می‌دهد:

کاتلین

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
}

جاوا

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