لا يتوفّر رمز 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; }