التوافق السابق مع الأنظمة القديمة

لا يتوفّر SearchView وشريط الإجراءات إلا على الإصدار 3.0 من نظام التشغيل Android لاحقًا. لإتاحة استخدام الأنظمة الأساسية القديمة، يمكنك الرجوع إلى مربّع حوار البحث. مربع حوار البحث هو واجهة مستخدم مُقدَّمة من النظام تظهر فوق التطبيق عند استدعائه.

ضبط الحد الأدنى والمستوى المستهدَف لواجهة برمجة التطبيقات

لإعداد مربّع حوار البحث، يجب أولاً الإفصاح في ملف البيان عن أنّك تريد إتاحة المحتوى القديم. الأجهزة، لكنّها تريد استهداف الإصدار 3.0 من Android أو الإصدارات الأحدث. عند القيام بذلك، سيقوم تطبيقك شريط الإجراءات تلقائيًا على Android 3.0 أو الإصدارات الأحدث وتستخدم نظام القوائم التقليدي على الأجهزة القديمة:

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

<application>
...

توفير مربع حوار البحث للأجهزة القديمة

ولتفعيل مربّع حوار البحث على الأجهزة القديمة، يمكنك الاتصال بالرقم onSearchRequested() عندما يختار أحد المستخدمين عملية البحث. عنصر قائمة من قائمة الخيارات. ونظرًا لأن الأجهزة التي تعمل بالإصدار 3.0 من نظام التشغيل Android والإصدارات الأحدث تعرض SearchView في شريط الإجراءات (كما هو موضّح في الدرس الأول)، الإصدارات فقط أقدم من 3.0 اتصال بـ onOptionsItemSelected() عندما يقوم المستخدم بتحديد عنصر قائمة البحث.

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 في "وقت التشغيل"

وفي وقت التشغيل، تحقَّق من إصدار الجهاز للتأكّد من عدم استخدام SearchView غير متوافق مع الأجهزة القديمة. في مثال التعليمة البرمجية، يحدث هذا في طريقة 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;
}