हमारा सुझाव है कि आप अपने ऐप्लिकेशन में खोज की सुविधा देने के लिए, ऐप्लिकेशन बार में 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>
अगर आपको खोज आइकॉन को ज़्यादा ऐक्सेस किया जा सकने वाला बनाना है, तो /res/drawable
फ़ोल्डर में एक ic_search.xml
फ़ाइल बनाएं और उसमें यह कोड शामिल करें:
<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
दिखाने के लिए, अपनी ऐक्टिविटी के onCreateOptionsMenu()
तरीके में, एक्सएमएल मेन्यू रिसॉर्स res/menu/options_menu.xml
को फ़ुलट करें:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) return true }
ऐप्लिकेशन को चलाने पर, कुछ ऐसा दिखता है:

SearchView
आपके ऐप्लिकेशन के ऐप्लिकेशन बार में दिखता है, लेकिन काम नहीं करता. खोज आइकॉन पर टैप करने पर, आपको कुछ ऐसा दिखेगा:

SearchView
कार्रवाई में है.
SearchView
को काम करने के लिए, आपको यह तय करना होगा कि SearchView
कैसे काम करता है.
सर्च कॉन्फ़िगरेशन बनाना
सर्च कॉन्फ़िगरेशन से यह पता चलता है कि SearchView
कैसे काम करता है. इसे res/xml/searchable.xml
फ़ाइल में तय किया जाता है. खोज कॉन्फ़िगरेशन में, कम से कम एक android:label
एट्रिब्यूट होना चाहिए. इस एट्रिब्यूट की वैल्यू, आपके Android मेनिफ़ेस्ट में मौजूद <application> या <activity> एलिमेंट के android:label
एट्रिब्यूट की वैल्यू जैसी होनी चाहिए. हालांकि, हमारा सुझाव है कि आप 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" />
अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, res/xml/searchable.xml
फ़ाइल पर ले जाने वाले <meta-data>
एलिमेंट का एलान करें. उस <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()
तरीका बनाया है उसमें, setSearchableInfo(SearchableInfo)
को कॉल करके, खोज कॉन्फ़िगरेशन को SearchView
से जोड़ें:
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
ऑब्जेक्ट मिलता है. यह ऑब्जेक्ट, सर्च कॉन्फ़िगरेशन एक्सएमएल फ़ाइल से बनाया जाता है. जब खोज कॉन्फ़िगरेशन, आपके 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
को पास किया जा सकता है. यहां, इसे अपने आर्किटेक्चर की अन्य लेयर में इस्तेमाल करके, खोज के नतीजे दिखाए जा सकते हैं.