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

কম্পোজ পদ্ধতিটি চেষ্টা করুন
অ্যান্ড্রয়েডের জন্য Jetpack Compose হলো প্রস্তাবিত UI টুলকিট। Compose-এ কীভাবে সার্চ ফাংশন যুক্ত করবেন তা জানুন।

আপনার অ্যাপে সার্চের সুবিধা দেওয়ার জন্য আমরা অ্যাপ বারে একটি আইটেম হিসেবে 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() মেথডে res/menu/options_menu.xml XML মেনু রিসোর্সটি ইনফ্লেট করুন:

কোটলিন

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 অ্যাট্রিবিউট অবশ্যই থাকতে হবে, যার মান আপনার অ্যান্ড্রয়েড ম্যানিফেস্টের <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" />

আপনার অ্যাপের ম্যানিফেস্ট ফাইলে, res/xml/searchable.xml ফাইলটিকে নির্দেশ করে এমন একটি <meta-data> এলিমেন্ট ঘোষণা করুন। যে <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 এ পাঠাতে পারেন, যেখান থেকে আপনার আর্কিটেকচারের অন্যান্য স্তরে সার্চের ফলাফল প্রদর্শন করার জন্য এটি ব্যবহার করতে পারবেন।