सर्च इंटरफ़ेस सेट अप करना

हमारा सुझाव है कि आप 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 काम करता है.

सर्च कॉन्फ़िगरेशन बनाना

एक खोज कॉन्फ़िगरेशन से पता चलता है कि 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, जहां इसका इस्तेमाल इसकी अन्य लेयर में किया जा सकता है आर्किटेक्चर का इस्तेमाल करें.