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