ওভারভিউ
এই উদাহরণটি দেখায় কিভাবে onConfigurationChanged() ওভাররাইড করে ডিভাইসের অরিয়েন্টেশন পরিবর্তন (পোর্ট্রেট ↔ ল্যান্ডস্কেপ) সনাক্ত করা যায়।
পূর্বশর্ত
- অ্যান্ড্রয়েড স্টুডিও (কোটলিন)
- Configuration ক্লাস সম্পর্কে ধারণা
ধাপ ১: প্রজেক্ট তৈরি করুন
File → New Project → Empty Activity → Language: Kotlin।
ধাপ ২: লেআউট (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Hello World!"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
ধাপ ৩: MainActivity.kt
package com.example.orientationchange
import android.content.res.Configuration
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
when (newConfig.orientation) {
Configuration.ORIENTATION_LANDSCAPE -> {
Toast.makeText(baseContext, "Landscape Mode", Toast.LENGTH_SHORT).show()
}
Configuration.ORIENTATION_PORTRAIT -> {
Toast.makeText(baseContext, "Portrait Mode", Toast.LENGTH_SHORT).show()
}
}
}
}
ধাপ ৪: AndroidManifest.xml - গুরুত্বপূর্ণ কনফিগারেশন
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.orientationchange">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
গুরুত্বপূর্ণ নোট
AndroidManifest.xml-এ android:configChanges অ্যাট্রিবিউট যোগ করা আবশ্যক। না করলে অরিয়েন্টেশন পরিবর্তনে এক্টিভিটি রিস্টার্ট হবে (onCreate আবার কল হবে) এবং onConfigurationChanged কল হবে না।
configChanges মানসমূহ
orientation- স্ক্রিন অরিয়েন্টেশন পরিবর্তনscreenSize- স্ক্রিন আকার পরিবর্তন (API 13+)screenLayout- স্ক্রিন লেআউট পরিবর্তনkeyboardHidden- কীবোর্ড ভিজিবিলিটি পরিবর্তনlocale- ভাষা পরিবর্তনuiMode- নাইট মোড/কার মোড পরিবর্তন
চলান ও পরীক্ষা
- অ্যাপ চালান (পোর্ট্রেট মোডে থাকবে)।
- ডিভাইস ঘুরিয়ে ল্যান্ডস্কেপ করুন → "Landscape Mode" টোস্ট দেখাবে।
- আবার পোর্ট্রেট করুন → "Portrait Mode" টোস্ট দেখাবে।
- এক্টিভিটি রিস্টার্ট হবে না (র্যান্ডম নম্বর বা ইনপুট ফিল্ড বজায় থাকবে)।
সতর্কতা ও সেরা অনুশীলন
configChangesব্যবহার করলে লেআউট রি-ইনফ্লেট হবে না। ম্যানুয়ালি 뷰 আপডেট করতে হলে।- আধুনিক অ্যাপে
ViewBinding/DataBinding+ViewModelব্যবহার করলে রিস্টার্ট সমস্যা কম। - জটিল লেআউটের জন্য আলাদা ল্যান্ডস্কেপ লেআউট (
layout-land) তৈরি করুন।