আপনার অ্যাপে সার্চ কার্যকারিতা প্রদান করার জন্য আমরা অ্যাপ বারে আইটেম হিসেবে
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()
পদ্ধতিতে XML মেনু রিসোর্স 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" />
আপনার অ্যাপের ম্যানিফেস্ট ফাইলে, একটি
<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() পদ্ধতিতে, 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
অবজেক্ট পাওয়া যায় যা সার্চ কনফিগারেশন XML ফাইল থেকে তৈরি করা হয়। সার্চ কনফিগারেশন আপনার 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-এ পাস করতে পারবেন, যেখানে আপনি এটি আপনার আর্কিটেকচারের অন্যান্য লেয়ারে ব্যবহার করে
সার্চ ফলাফল ফিরিয়ে এনে দেখাতে পারবেন।