কম্পিউটার টিউটোরিয়াল

Kotlin ব্যবহার করে Android Spinner-এ ডিফল্ট টেক্সট (হিন্ট) সেট করা

ওভারভিউ

Android Spinner-এ ডিফল্টভাবে কোনো "Select an item" টেক্সট দেখানোর বিল্ট-ইন সাপোর্ট নেই। এই টিউটোরিয়ালে একটি ডামি আইটেম লিস্টে যোগ করে এবং সেটিকে হাইড করে ডিফল্ট টেক্সট দেখানোর পদ্ধতি দেখানো হয়েছে।

প্রয়োজনীয় ধাপসমূহ

ধাপ ১: নতুন প্রজেক্ট তৈরি

ধাপ ২: activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:text="Spinner with Default Text"
        android:textColor="@android:color/background_dark"
        android:textSize="18sp"
        android:textStyle="bold" />
    
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp" />
</LinearLayout>

ধাপ ৩: MainActivity.kt (ক্লাসিক পদ্ধতি)

import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var spinner: Spinner
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "Spinner Demo"
        
        spinner = findViewById(R.id.spinner)
        
        // ডেটা লিস্ট: প্রথম আইটেমটি হবে ডিফল্ট/হিন্ট টেক্সট
        val footballPlayers = mutableListOf(
            "Select a player",  // Position 0 = Default/Hint
            "Cristiano Ronaldo",
            "Lionel Messi",
            "Neymar Jr",
            "Isco",
            "Gareth Bale",
            "Luis Suarez"
        )
        
        val adapter = ArrayAdapter(
            this, 
            android.R.layout.simple_spinner_item, 
            footballPlayers
        )
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter
        
        // ডিফল্টভাবে প্রথম আইটেম সিলেক্টেড (হিন্ট)
        spinner.setSelection(0, false)
        
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
                if (position == 0) {
                    // হিন্ট আইটেম সিলেক্টেড - কিছুই করবেন না
                    return@onItemSelected
                }
                
                val selectedPlayer = parent.getItemAtPosition(position) as String
                Toast.makeText(parent.context, "Selected: $selectedPlayer", Toast.LENGTH_SHORT).show()
            }
            
            override fun onNothingSelected(parent: AdapterView<*>?) {}
        }
    }
}

ধাপ ৪: AndroidManifest.xml

স্ট্যান্ডার্ড কনফিগারেশন।

🚀 উন্নত পদ্ধতি: কাস্টম অ্যাডাপ্টার দিয়ে হিন্ট আইটেম হাইড করা

উপরের পদ্ধতিতে হিন্ট আইটেম ড্রপডাউন-এ দেখায়। এটি হাইড করতে কাস্টম অ্যাডাপ্টার লাগবে:

CustomSpinnerAdapter.kt

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView

class CustomSpinnerAdapter(
    context: Context,
    layoutRes: Int,
    private val items: List,
    private val hint: String
) : ArrayAdapter(context, layoutRes, items) {
    
    // ড্রপডাউন ভিউতে হিন্ট হাইড
    override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
        if (position == 0) {
            // হিন্টের জন্য খালি ভিউ রিটার্ন (height=0)
            val emptyView = View(context)
            emptyView.visibility = View.GONE
            emptyView.layoutParams = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, 0
            )
            return emptyView
        }
        return super.getDropDownView(position - 1, convertView, parent)
    }
    
    // ড্রপডাউন আইটেম কাউন্ট (হিন্ট বাদে)
    override fun getCount(): Int = items.size - 1
    
    // সিলেক্টেড ভিউতে হিন্ট দেখাও
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val view = super.getView(0, convertView, parent)
        (view as TextView).text = hint
        return view
    }
    
    // পজিশন ম্যাপিং
    override fun getItem(position: Int): String = items[position + 1]
    override fun getItemId(position: Int): Long = position.toLong()
}

ব্যবহার:

val players = listOf("Cristiano Ronaldo", "Lionel Messi", "Neymar Jr", "Isco", "Gareth Bale", "Luis Suarez")
val adapter = CustomSpinnerAdapter(this, android.R.layout.simple_spinner_item, players, "Select a player")
spinner.adapter = adapter

🎯 আধুনিক পদ্ধতি: Material AutoCompleteTextView (সুপারিশ করা)

Spinner-এর বদলে AutoCompleteTextView + TextInputLayout ব্যবহার করুন - এতে বিল্ট-ইন হিন্ট সাপোর্ট রয়েছে:

Dependency:

implementation "com.google.android.material:material:1.11.0"

Layout:

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Select Player"
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
    
    <AutoCompleteTextView
        android:id="@+id/autoComplete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>

Activity-এ:

val players = listOf("Cristiano Ronaldo", "Lionel Messi", "Neymar Jr", "Isco", "Gareth Bale", "Luis Suarez")
val adapter = ArrayAdapter(this, R.layout.dropdown_item, players)
autoComplete.setAdapter(adapter)
autoComplete.setOnItemClickListener { _, _, position, _ ->
    val selected = players[position]
    Toast.makeText(this, "Selected: $selected", Toast.LENGTH_SHORT).show()
}

dropdown_item.xml:

<TextView xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:ellipsize="end"
    android:maxLines="1"
    android:textAppearance="?attr/textAppearanceSubtitle1" />

সারসংক্ষেপ

পদ্ধতিপ্রসঙ্গঅবদান
Dummy item + position checkসহজ, কোড কমহিন্ট ড্রপডাউন-এ দেখায়
Custom Adapterহিন্ট ড্রপডাউন-এ হাইডবেশি কোড, ফ্লেক্সিবল
Material AutoCompleteTextView✅ আধুনিক, বিল্ট-ইন হিন্টসেরা UX, Material Design 3
  1. অ্যান্ড্রয়েডে মার্কী (Marquee) টেক্সট তৈরির পদ্ধতি

  2. অ্যান্ড্রয়েডে ডিফল্ট টেক্সটসহ Spinner তৈরি করা

  3. Kotlin ব্যবহার করে Android-এ পেজিনেশন টেক্সট তৈরি করা

  4. Kotlin ব্যবহার করে Android TextView-এ একাধিক স্টাইল প্রয়োগ করা