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

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

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

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

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

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

<application>
...

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

لعرض مربّع حوار البحث على الأجهزة القديمة، يمكنك استدعاء onSearchRequested() عندما يختار المستخدم عنصر البحث من قائمة الخيارات. بما أنّ أجهزة Android 3.0 والإصدارات الأحدث تعرِض الرمز 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;
}