এই উদাহরণটি দেখায় কিভাবে কোটলিন ব্যবহার করে EditText-এ বাইরে যেকোনো জায়গায় ক্লিক করলে (ফোকাস হারালে) সফট কিবোর্ড আটোমেটিক্যালি হাইড করা যায়। InputMethodManager ব্যবহার করে এটি বাস্তবায়ন করা হয়।
প্রথম ধাপ: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।
দ্বিতীয় ধাপ: লেআউট XML ডিজাইন করুন
res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন। মূল লেআউটে LinearLayout ব্যবহার করা হয়েছে যাতে পুরো স্ক্রিন টাচ করা যায়:
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:focusableInTouchMode="true"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:hint="এখানে টেক্সট লিখুন"
android:textColor="@android:color/background_dark"
android:textSize="20sp" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="setText"
android:text="টেক্সট সেট করুন"
android:textStyle="bold" />
</LinearLayout>
তৃতীয় ধাপ: MainActivity.kt তে কিবোর্ড হাইড করার লজিক লিখুন
src/MainActivity.kt ফাইলে নিচের কোড যোগ করুন। মূল কোডটি ইতিমধ্যে ভালো ছিল, শুধু কমেন্ট এবং স্ট্রাকচার উন্নত করা হয়েছে:
import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var editText: EditText
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
editText = findViewById(R.id.editText)
textView = findViewById(R.id.textView)
// রুট লেআউটে টাচ লিসেনার যোগ করে কিবোর্ড হাইড করুন (বিকল্প পদ্ধতি)
findViewById<View>(android.R.id.content).setOnTouchListener { _, _ ->
hideKeyboard()
false // ইভেন্ট প্রপাগেট করতে দিন
}
}
fun setText(view: View) {
val newText = editText.text.toString()
textView.text = newText
hideKeyboard() // বাটন ক্লিক করেও কিবোর্ড হাইড
}
private fun hideKeyboard() {
val view = currentFocus
if (view != null) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
view.clearFocus() // ফোকাস ক্লিয়ার করুন
}
}
}
চতুর্থ ধাপ: ম্যানিফেস্ট ফাইল
androidManifest.xml ফাইলটি সাধারণ থাকবে।
বিকল্প পদ্ধতি: DispatchTouchEvent ওভাররাইড করে
অ্যাক্টিভিটির dispatchTouchEvent() ওভাররাইড করে সব জায়গায় টাচে কিবোর্ড হাইড করা যায়:
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
if (ev.action == MotionEvent.ACTION_DOWN) {
val view = currentFocus
if (view is EditText) {
val outRect = Rect()
view.getGlobalVisibleRect(outRect)
if (!outRect.contains(ev.rawX.toInt(), ev.rawY.toInt())) {
view.clearFocus()
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
}
return super.dispatchTouchEvent(ev)
}
অ্যাপ্লিকেশন চালানোর নির্দেশনা
অ্যান্ড্রয়েড ডিভাইস সংযুক্ত করে Run করুন। EditText-এ টাইপ করুন, তারপর EditText-এ বাইরে যেকোনো জায়গায় বা বাটনে ক্লিক করলে কিবোর্ড আটোমেটিক্যালি হাইড হয়ে যাবে।