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

تجربة طريقة "الكتابة"
‫Jetpack Compose هي مجموعة أدوات واجهة المستخدم المقترَحة لنظام التشغيل Android. تعرَّف على كيفية إضافة وظيفة البحث في "إنشاء".

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

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

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

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