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