हमारा सुझाव है कि आप
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
दिखाने के लिए, एक्सएमएल मेन्यू को बड़ा करें
इसमें संसाधन 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
एट्रिब्यूट की वैल्यू एक ही होती है
<ऐप्लिकेशन>
या <activity>
एंड स्क्रीन पर एलिमेंट जोड़ें. हालांकि, हमारा सुझाव है कि आप
उपयोगकर्ता को यह बताने के लिए कि 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
ऑब्जेक्ट है जो सर्च कॉन्फ़िगरेशन एक्सएमएल फ़ाइल से बनाया गया है. खोज करते समय
कॉन्फ़िगरेशन आपके 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
, जहां इसका इस्तेमाल इसकी अन्य लेयर में किया जा सकता है
आर्किटेक्चर का इस्तेमाल करें.