ننصحك باستخدام التطبيق المصغَّر SearchView
كعنصر في شريط التطبيق لتوفير وظائف البحث في تطبيقك. وكما هو الحال مع جميع العناصر في شريط التطبيق، يمكنك تحديد SearchView
للعرض في جميع الأوقات أو عند توفّر مساحة فقط. يمكنك أيضًا تعريفها على أنّها إجراء قابل للتصغير يعرض علامة SearchView
كرمز في البداية ثم يأخذ شريط التطبيق بأكمله كحقل بحث عندما ينقر المستخدم على الرمز.
إضافة ميزة SearchView إلى شريط التطبيق
لإضافة تطبيق SearchView
المصغّر إلى شريط التطبيقات، أنشئ ملفًا في
مشروعك باسم res/menu/options_menu.xml
وأضِف الرمز التالي
إلى الملف. تحدد هذه التعليمة البرمجية كيفية إنشاء عنصر البحث، مثل الأيقونة
التي يجب استخدامها وعنوان العنصر. collapseActionView
تتيح لك السمة SearchView
التوسيع لتشغل شريط التطبيقات بأكمله وتصغيرها مرة أخرى إلى عنصر شريط تطبيق عادي عند عدم استخدامها. بسبب
مساحة شريط التطبيق المحدودة على أجهزة الهواتف، ننصح باستخدام السمة
collapsibleActionView
لتوفير تجربة أفضل
للمستخدم.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu>
إذا أردت رمز بحث يمكن الوصول إليه بسهولة، أنشِئ ملف
ic_search.xml
في مجلد /res/drawable
وضمِّن الرمز التالي فيه:
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> </vector>
لعرض SearchView
في شريط التطبيقات، يمكنك تضخيم مورد قائمة XML res/menu/options_menu.xml
في طريقة onCreateOptionsMenu()
الخاصة بنشاطك:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) return true }
يؤدي تشغيل التطبيق إلى إنشاء شيء مثل ما يلي:
يظهر رمز SearchView
في شريط التطبيقات في التطبيق، ولكنه لا يعمل. إذا نقرت على رمز البحث، سيظهر لك ما يلي:
لاستخدام السمة SearchView
، يجب تحديد طريقة عمل
SearchView
.
إنشاء إعدادات بحث
تحدِّد إعدادات البحث طريقة عمل SearchView
وتحديدها في ملف res/xml/searchable.xml
. يجب أن تحتوي إعدادات البحث
على الأقل على سمة android:label
لها
القيمة نفسها للسمة android:label
للعنصر
<application>
أو <activity>
في بيان Android. مع ذلك، ننصح أيضًا بإضافة السمة android:hint
لمنح المستخدم فكرة عما يجب إدخاله في مربّع البحث.
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" />
في ملف البيان الخاص بتطبيقك، حدِّد عنصر
<meta-data>
يشير إلى ملف res/xml/searchable.xml
. حدِّد العنصر في <activity>
الذي تريد عرض SearchView
فيه.
<activity android:name=".SearchResultsActivity" android:exported="false" android:label="@string/title_activity_search_results" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat.Light"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
في طريقة onCreateOptionsMenu()
التي تنشئها، اربط إعدادات البحث بـ SearchView
من خلال استدعاء setSearchableInfo(SearchableInfo)
:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView val component = ComponentName(this, SearchResultsActivity::class.java) val searchableInfo = searchManager.getSearchableInfo(component) searchView.setSearchableInfo(searchableInfo) return true }
عند الاستدعاء إلى
getSearchableInfo()
يمكن الحصول على كائن
SearchableInfo
الذي يتم إنشاؤه من ملف XML الخاص بإعداد البحث. عند ربط إعدادات البحث بشكل صحيح مع SearchView
ويرسل المستخدم طلب بحث، تبدأ SearchView
نشاطًا بقصد ACTION_SEARCH
. بعد ذلك، تحتاج إلى نشاط يمكنه الفلترة لعرض هذا الغرض والتعامل مع طلب البحث.
إنشاء نشاط قابل للبحث
يتيح لك النشاط القابل للبحث إمكانية البحث عن الغرض من ACTION_SEARCH
والبحث عن طلب البحث في مجموعة بيانات. لإنشاء نشاط يمكن البحث فيه، يجب تحديد
نشاط من اختيارك للفلترة حسب هدف ACTION_SEARCH
:
<activity android:name=".SearchResultsActivity" ... > ... <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> ... </activity>
في نشاطك القابل للبحث، تعامل مع هدف ACTION_SEARCH
من خلال البحث عنه في طريقة onCreate()
.
Kotlin
class SearchResultsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search_results) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { val query = intent.getStringExtra(SearchManager.QUERY) Log.d("SEARCH", "Search query was: $query") } } }
يمكن لـ SearchView
قبول طلب بحث المستخدم وبدء
نشاطك القابل للبحث بقصد ACTION_SEARCH
.
بعد الحصول على طلب البحث، يمكنك تمريره إلى
ViewModel
، حيث يمكنك استخدامه في طبقات أخرى
من البنية الأساسية لاسترداد نتائج البحث لعرضها.