SearchView
और ऐक्शन बार की सुविधा, सिर्फ़ Android 3.0 और उसके बाद के वर्शन पर उपलब्ध है. पुराने प्लैटफ़ॉर्म के साथ काम करने के लिए, खोज डायलॉग का इस्तेमाल किया जा सकता है. सर्च डायलॉग, सिस्टम से मिलने वाला यूज़र इंटरफ़ेस (यूआई) है. इसे चालू करने पर, यह आपके ऐप्लिकेशन के ऊपर ओवरले हो जाता है.
कम से कम और टारगेट एपीआई लेवल सेट करना
खोज डायलॉग सेट अप करने के लिए, पहले अपने मेनिफ़ेस्ट में यह बताएं कि आपको पुराने डिवाइसों पर काम करना है, लेकिन Android 3.0 या उसके बाद के वर्शन को टारगेट करना है. ऐसा करने पर, आपका ऐप्लिकेशन Android 3.0 या उसके बाद के वर्शन पर, ऐक्शन बार का इस्तेमाल अपने-आप करता है. साथ ही, पुराने डिवाइसों पर, ऐप्लिकेशन के लिए सामान्य मेन्यू सिस्टम का इस्तेमाल करता है:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
पुराने डिवाइसों के लिए Search डायलॉग बॉक्स उपलब्ध कराना
पुराने डिवाइसों पर खोज डायलॉग को चालू करने के लिए, जब भी कोई उपयोगकर्ता विकल्प मेन्यू से खोज 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; }