অনুসন্ধান ইন্টারফেস সেট আপ করুন

আপনার অ্যাপে সার্চ কার্যকারিতা প্রদান করতে আমরা অ্যাপ বারে একটি আইটেম হিসাবে 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 স্ফীত করুন:

কোটলিন

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options_menu, menu)

    return true
}

অ্যাপটি চালানো এইরকম কিছু তৈরি করে:

অ্যাপের শীর্ষ বারে একটি অনুসন্ধান আইকন সহ একটি খালি স্ক্রীন দেখানো একটি চিত্র৷
চিত্র 1. অ্যাপের শীর্ষ বারে একটি অনুসন্ধান আইকন।

SearchView আপনার অ্যাপের অ্যাপ বারে প্রদর্শিত হবে, কিন্তু এটি কার্যকরী নয়। আপনি যদি অনুসন্ধান আইকনে আলতো চাপেন, আপনি এইরকম কিছু পাবেন:

সার্চ ভিউ অ্যাকশনে দেখানো একটি ছবি
চিত্র 2. 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 এর সাথে যুক্ত করুন :

কোটলিন

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>

আপনার অনুসন্ধানযোগ্য কার্যকলাপে, আপনার onCreate() পদ্ধতিতে এটি পরীক্ষা করে ACTION_SEARCH উদ্দেশ্যটি পরিচালনা করুন৷

কোটলিন

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 এ পাস করতে পারেন, যেখানে আপনি প্রদর্শনের জন্য অনুসন্ধান ফলাফল পুনরুদ্ধার করতে আপনার আর্কিটেকচারের অন্যান্য স্তরগুলিতে এটি ব্যবহার করতে পারেন৷