पुराने सिस्टम के साथ काम करता है

Compose को आज़माएं
Android के लिए, Jetpack Compose को यूज़र इंटरफ़ेस (यूआई) टूलकिट के तौर पर इस्तेमाल करने का सुझाव दिया जाता है. Compose में खोज की सुविधा जोड़ने का तरीका जानें.

SearchView और ऐक्शन बार, सिर्फ़ Android 3.0 और इसके बाद के वर्शन पर उपलब्ध हैं. पुराने प्लैटफ़ॉर्म के लिए, खोज डायलॉग पर वापस जाया जा सकता है. खोज डायलॉग, सिस्टम की ओर से उपलब्ध कराया गया यूज़र इंटरफ़ेस (यूआई) है. इसे चालू करने पर, यह आपके ऐप्लिकेशन के ऊपर दिखता है.

कम से कम और टारगेट एपीआई लेवल सेट करना

सर्च डायलॉग को सेट अप करने के लिए, सबसे पहले अपने मेनिफ़ेस्ट में यह एलान करें कि आपको पुराने डिवाइसों के लिए सहायता देनी है, लेकिन आपको Android 3.0 या इसके बाद के वर्शन को टारगेट करना है. ऐसा करने पर, आपका ऐप्लिकेशन Android 3.0 या उसके बाद के वर्शन पर अपने-आप ऐक्शन बार का इस्तेमाल करता है. साथ ही, पुराने डिवाइसों पर मेन्यू सिस्टम का इस्तेमाल करता है:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<application>
...

पुराने डिवाइसों के लिए Search Dialog उपलब्ध कराना

पुराने डिवाइसों पर खोज डायलॉग बॉक्स खोलने के लिए, जब भी कोई उपयोगकर्ता विकल्पों के मेन्यू से खोज मेन्यू आइटम चुनता है, तब onSearchRequested() को कॉल करें. Android 3.0 और इसके बाद के वर्शन वाले डिवाइसों में, ऐक्शन बार में SearchView दिखता है. जैसा कि पहले लेसन में दिखाया गया है. इसलिए, 3.0 से पहले के वर्शन वाले डिवाइसों में ही, उपयोगकर्ता के खोज मेन्यू आइटम को चुनने पर onOptionsItemSelected() कॉल किया जाता है.

Kotlin

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.search -> {
            onSearchRequested()
            true
        }
        else -> false
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}

रनटाइम के दौरान Android बिल्ड वर्शन देखना

रनटाइम के दौरान, डिवाइस के वर्शन की जांच करें. इससे यह पक्का किया जा सकेगा कि पुराने डिवाइसों पर SearchView का इस्तेमाल न किया जाए. हमारे उदाहरण कोड में, ऐसा onCreateOptionsMenu() तरीके में होता है:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {

    menuInflater.inflate(R.menu.options_menu, menu)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        (menu.findItem(R.id.search).actionView as SearchView).apply {
            setSearchableInfo(searchManager.getSearchableInfo(componentName))
            setIconifiedByDefault(false)
        }
    }
    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
    }
    return true;
}