ننصح باستخدام
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
، حيث يمكنك استخدامه في طبقات أخرى من
البنية الأساسية لاسترداد نتائج البحث لعرضها.