Drawer — এটি কী, DrawerLayout এবং অ্যাপ্লিকেশনে সাইড মেনু

লেখক: IT Sectr প্রকাশিত: 2026-02-23 পড়ার সময়: 12 মিনিট

Drawer (Navigation Drawer) একটি ইন্টারেক্টিভ প্যানেল যা স্ক্রিনের বাম (বা ডান) প্রান্ত থেকে স্লাইড হয়ে আসে এবং নেভিগেশন লিংক প্রদর্শন করে। Android-এ এটি DrawerLayout-এর মাধ্যমে বাস্তবায়িত হয়, iOS-এ — SideMenu-এর মতো কাস্টম সমাধান বা iPad-এ স্ট্যান্ডার্ড UISplitViewController-এর মাধ্যমে। স্পেসিফিকেশন সম্পর্কে আরও জানতে Material Design 3 ডকুমেন্টেশন দেখুন।

মূল বিষয়

  • Drawer একটি সাইড নেভিগেশন মেনু যা সোয়াইপ বা হ্যামবার্গার আইকনে ট্যাপ করে স্লাইড হয়
  • DrawerLayout স্লাইডিং মেনু বাস্তবায়নের জন্য Android-এর স্ট্যান্ডার্ড কন্টেইনার
  • SideMenu কাস্টমাইজযোগ্য সাইড মেনুর জন্য জনপ্রিয় iOS লাইব্রেরি
  • Modal Drawer কন্টেন্ট ঢেকে দেয়, নেভিগেশন ফোকাসের জন্য ব্যবহৃত হয়
  • Standard Drawer কন্টেন্ট ডানে সরিয়ে দেয়, কিছু অংশ দৃশ্যমান রাখে

Drawer কী?

Drawer (Navigation Drawer) একটি নেভিগেশন উপাদান যা প্যানেল আকারে থাকে এবং সোয়াইপ জেসচার বা হ্যামবার্গার আইকনে (তিনটি অনুভূমিক রেখা) ট্যাপ করে স্ক্রিনের বাম প্রান্ত থেকে স্লাইড হয়ে আসে। Drawer-এ নেভিগেশন লিংক, হেডার এবং ঐচ্ছিক উপাদান থাকে: ব্যবহারকারীর অবতার, নোটিফিকেশন ব্যাজ, বিভাজক। প্যানেল কন্টেন্ট ঢেকে দিতে পারে (Modal) বা সরিয়ে দিতে পারে (Standard)।

Material Design 3 (2026) Navigation Drawer-কে 6+ নেভিগেশন আইটেমযুক্ত অ্যাপের জন্য একটি উপাদান হিসেবে সংজ্ঞায়িত করে। Bottom Navigation-এর বিপরীতে, Drawer স্ক্রিনে স্থায়ী জায়গা নেয় না এবং শুধুমাত্র ব্যবহারকারীর অনুরোধে দেখানো হয়। এটি কন্টেন্টের জন্য জায়গা খালি করে কিন্তু খুলতে অতিরিক্ত পদক্ষেপের প্রয়োজন হয়। Google গভীর সেকশন শ্রেণিবিন্যাসযুক্ত অ্যাপের জন্য Drawer সুপারিশ করে।

UX Planet গবেষণা (2025) দেখিয়েছে: Drawer 5–15 সেকশনের অ্যাপের জন্য উপযুক্ত, কিন্তু নেভিগেশন সময় Bottom Navigation-এর তুলনায় 40% বেশি। ব্যবহারকারীরা স্ক্রিন ফোল্ডের (স্ক্রোল) নিচে থাকা মেনু আইটেম মিস করেন। তাই গুরুত্বপূর্ণ সেকশন Drawer-এর উপরে থাকা উচিত, এবং কম গুরুত্বপূর্ণ (অ্যাপ সম্পর্কে, সেটিংস) — নিচে, একটি বিভাজক দ্বারা পৃথক করা।

Drawer-এর প্রকার: Modal এবং Standard

Modal Drawer কন্টেন্টের উপরে স্লাইড হয়, ব্যাকগ্রাউন্ড ম্লান করে। মোবাইল ডিভাইসের জন্য ব্যবহৃত হয় যেখানে স্ক্রিনের প্রস্থ সীমিত। আইটেম নির্বাচনের পর, Drawer স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়। Standard Drawer (Permanent) একটি স্থির প্যানেল যা সর্বদা দৃশ্যমান থাকে, কন্টেন্ট সরিয়ে দেয়। 900 dp থেকে স্ক্রিন প্রস্থের ট্যাবলেট এবং ডেস্কটপে ব্যবহৃত হয়। Material 3 Rail Drawer-ও সংজ্ঞায়িত করে — ট্যাবলেটের জন্য একটি কমপ্যাক্ট সংস্করণ যা শুধু আইকন দেখায়।

প্রকারআচরণব্যবহার
Modalকন্টেন্ট ঢেকে দেয়, ব্যাকগ্রাউন্ড ম্লান করেফোন, অস্থায়ী নেভিগেশন
Standardকন্টেন্ট সরিয়ে দেয়, স্থিরট্যাবলেট, ডেস্কটপ (900+ dp)
Railআইকন সহ কমপ্যাক্ট সাইড প্যানেলট্যাবলেট, অভিযোজিত নেভিগেশন

Android-এ DrawerLayout

DrawerLayout Android-এ স্ট্যান্ডার্ড ViewGroup যা স্লাইডিং সাইড মেনু বাস্তবায়ন করে। DrawerLayout-এ দুটি চাইল্ড এলিমেন্ট থাকে: প্রথমটি — মূল কন্টেন্ট (NavHostFragment সহ FrameLayout), দ্বিতীয়টি — মেনু সহ NavigationView। DrawerLayout ActionBarDrawerToggle-এর মাধ্যমে সোয়াইপ জেসচার এবং প্রোগ্রামেটিক ওপেন/ক্লোজ হ্যান্ডল করে।

kotlin
// DrawerLayout এবং NavigationView সহ অ্যাক্টিভিটি
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var drawerLayout: DrawerLayout

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        drawerLayout = binding.drawerLayout
        val navView = binding.navView
        val navController = findNavController(R.id.nav_host_fragment)

        // Navigation Component-এর সাথে Drawer সংযুক্ত করা
        NavigationUI.setupActionBarWithNavController(
            this, navController, drawerLayout
        )
        NavigationUI.setupWithNavController(navView, navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        return NavigationUI.navigateUp(
            findNavController(R.id.nav_host_fragment),
            drawerLayout
        )
    }
}

// XML: activity_main.xml
// <androidx.drawerlayout.widget.DrawerLayout
//   android:id="@+id/drawerLayout"
//   ...>
//   <!-- মূল বিষয়বস্তু -->
//   <FrameLayout android:id="@+id/nav_host_fragment"
//     android:layout_width="match_parent"
//     android:layout_height="match_parent" />
//   <!-- Navigation Drawer -->
//   <com.google.android.material.navigation.NavigationView
//     android:id="@+id/navView"
//     android:layout_width="wrap_content"
//     android:layout_height="match_parent"
//     android:layout_gravity="start"
//     app:menu="@menu/nav_menu" />
// </androidx.drawerlayout.widget.DrawerLayout>

NavigationView Drawer কন্টেন্টের জন্য Material Design উপাদান। এটি হেডার (headerLayout), মেনু আইটেম (menu), উপশিরোনাম, চেকবক্স এবং সুইচ সমর্থন করে। app:menu অ্যাট্রিবিউট নেভিগেশন আইটেম সহ XML মেনু নির্দেশ করে। NavigationUI স্বয়ংক্রিয়ভাবে সক্রিয় আইটেম হাইলাইট করে এবং NavController-এর সাথে অবস্থা সিঙ্ক্রোনাইজ করে।

iOS-এ সাইড মেনু

iOS-এ কোনো অন্তর্নির্মিত "Drawer" উপাদান নেই — Apple iPhone-এর জন্য সাইড মেনু সুপারিশ করে না (HIG, 2026)। তবে iPad-এর জন্য, প্রাথমিক এবং মাধ্যমিক প্যানেল সহ UISplitViewController ব্যবহার করা হয়। iPhone-এর জন্য, সাইড মেনু থার্ড-পার্টি লাইব্রেরি (SideMenu, SwiftUI-side-menu) বা কন্টেন্ট অফসেট সহ কাস্টম সমাধানের মাধ্যমে বাস্তবায়িত হয়। SwiftUI-তে, অফসেট অ্যানিমেশন সহ ZStack-এর মাধ্যমে সাইড মেনু তৈরি করা হয়।

swift
import SwiftUI

struct DrawerView<Content: View, Menu: View>: View {
    let menuWidth: CGFloat = 280

    @Binding var isOpen: Bool
    @ViewBuilder let content: Content
    @ViewBuilder let menu: Menu

    var body: some View {
        ZStack(alignment: .leading) {
            content
                .offset(x: isOpen ? menuWidth : 0)
                .animation(.easeInOut, value: isOpen)

            if isOpen {
                menu
                    .frame(width: menuWidth)
                    .transition(.move(edge: .leading))

                Color.black.opacity(0.3)
                    .ignoresSafeArea()
                    .onTapGesture { isOpen = false }
            }
        }
    }
}

// ব্যবহার
struct ContentView: View {
    @State private var showDrawer = false

    var body: some View {
        DrawerView(isOpen: $showDrawer) {
            NavigationStack {
                HomeView()
                    .toolbar {
                        ToolbarItem(placement: .navigationBarLeading) {
                            Button(action: { showDrawer.toggle() }) {
                                Image(systemName: "line.horizontal.3")
                            }
                        }
                    }
            }
        } menu: {
            DrawerMenuView()
        }
    }
}

প্রোডাকশন iOS প্রকল্পের জন্য, SideMenu লাইব্রেরি প্রায়শই ব্যবহৃত হয় (GitHub, 8k+ স্টার)। এটি জেসচার সাপোর্ট, ব্যাকগ্রাউন্ড ব্লার, কাস্টম প্রস্থ এবং অ্যানিমেশন সহ রেডিমেড UIViewController প্রদান করে। SideMenu বাম এবং ডান মেনু, একাধিক স্তর এবং UINavigationController-এর মাধ্যমে UIKit ইন্টিগ্রেশন সমর্থন করে। বিকল্প হলো iPad-এ UISplitViewController (সিস্টেম, কাস্টম অ্যানিমেশন ছাড়া)।

Drawer কাস্টমাইজেশন: হেডার, আইকন, সেকশন

Drawer বিস্তৃত কাস্টমাইজেশন অনুমতি দেয়। Android-এ, NavigationView headerLayout সমর্থন করে — মেনু আইটেমের উপরে রাখা কাস্টম লেআউট। এতে অবতার, ব্যবহারকারীর নাম, ইমেল এবং কভার ছবি থাকতে পারে। মেনু আইটেমগুলি উপশিরোনাম, বিভাজক এবং সুইচ সহ <menu>-এর মাধ্যমে গ্রুপ করা হয়। iOS-এ, SideMenu কাস্টমাইজেশনের মধ্যে ব্যাকগ্রাউন্ড রং, ব্লার, প্রস্থ এবং কোণের ব্যাসার্ধ সেট করা অন্তর্ভুক্ত।

kotlin
// NavigationView-এর জন্য কাস্টম হেডার
val headerView = binding.navView.inflateHeaderView(R.layout.nav_header)
headerView.findViewById<ImageView>(R.id.iv_avatar)
    .setImageResource(R.drawable.avatar)
headerView.findViewById<TextView>(R.id.tv_name)
    .text = "John Doe"

// মেনু আইটেম কনফিগার করা
val menuItem = binding.navView.menu.findItem(R.id.nav_notifications)
menuItem.isChecked = true

// ব্যাজ যোগ করা
val badge = binding.navView.getOrCreateBadge(R.id.nav_notifications)
badge.number = 15
badge.isVisible = true

Material Design নিম্নলিখিত Drawer কাঠামো সুপারিশ করে: হেডার (নাম, অবতার), প্রধান নেভিগেশন আইটেম (5–8), বিভাজক, মাধ্যমিক আইটেম (সেটিংস, সাহায্য), ফুটার (অ্যাপ সম্পর্কে, সংস্করণ)। Material 3-এ, NavigationView itemShape এবং itemBackground-এর মাধ্যমে কাস্টম সক্রিয় আইটেম হাইলাইটিং সমর্থন করে।

কখন Drawer ব্যবহার করবেন: UX সুপারিশ

Drawer 6+ সেকশন, সেটিংস এবং সাহায্য পৃষ্ঠার অ্যাপের জন্য কার্যকর। সেই অ্যাপের জন্য উপযুক্ত নয় যেখানে সেকশনে দ্রুত অ্যাক্সেস গুরুত্বপূর্ণ — এমন ক্ষেত্রে Bottom Navigation ভালো। Material Design Drawer-কে Bottom Navigation-এর সাথে একত্রিত করার সুপারিশ করে: প্রধান নেভিগেশন — Bottom (3–5 ট্যাব), অতিরিক্ত — Drawer (সেটিংস, সাহায্য, অ্যাপ সম্পর্কে)।

Drawer বাস্তবায়নে সাধারণ ভুল: ওভারলোডেড মেনু (গ্রুপিং ছাড়া 15+ আইটেম), ফোল্ডের নিচে গুরুত্বপূর্ণ সেকশন লুকানো, আইকনের অভাব (আইকন ছাড়া টেক্সট 30% ধীরে স্ক্যান হয়), বিলম্ব সহ অ্যানিমেশন (≤ 200 ms হওয়া উচিত)। সেরা অনুশীলন: ব্যবহারকারীর নাম সহ হেডার, প্রতিটি আইটেমের জন্য আইকন, গ্রুপের মধ্যে বিভাজক, সক্রিয় সেকশন হাইলাইটিং, খোলার জন্য সোয়াইপ জেসচার সমর্থন।

  • 6+ সেকশন — Drawer যুক্তিযুক্ত, কম — Bottom Navigation ব্যবহার করুন
  • আইকন — প্রতিটি আইটেমের জন্য বাধ্যতামূলক, ভিজ্যুয়াল সার্চ দ্রুত করে
  • গ্রুপিং — প্রধান এবং মাধ্যমিক আইটেমের মধ্যে বিভাজক
  • হেডার — ব্যক্তিগতকরণের জন্য অবতার, নাম এবং ইমেল (সোশ্যাল অ্যাপ)
  • সোয়াইপ জেসচার — খোলার জন্য বাধ্যতামূলক, হ্যামবার্গার বোতাম দ্বারা নকল

সচরাচর জিজ্ঞাস্য

Drawer Bottom Navigation থেকে কীভাবে আলাদা?

Drawer একটি লুকানো সাইড মেনু যা জেসচার দ্বারা খোলে, 6+ সেকশন এবং গভীর শ্রেণিবিন্যাসের জন্য উপযুক্ত। Bottom Navigation 3–5 সেকশনের জন্য সর্বদা দৃশ্যমান নিচের বার। Drawer স্ক্রিন জায়গা বাঁচায় কিন্তু খুলতে অতিরিক্ত পদক্ষেপ প্রয়োজন, যা নেভিগেশন সময় 40% বাড়িয়ে দেয়।

SwiftUI-তে Drawer কীভাবে যোগ করবেন?

SwiftUI-তে কোনো অন্তর্নির্মিত Drawer নেই। উপরের উদাহরণের মতো কন্টেন্ট অফসেট এবং অ্যানিমেশন সহ ZStack ব্যবহার করুন। প্রোডাকশনের জন্য, লাইব্রেরি ব্যবহার করা হয়: SideMenu (Swift Package) বা UISplitViewController-এর উপর কাস্টম র্যাপার। iPad-এ, preferredDisplayMode .oneBesideSecondary সহ UISplitViewController ব্যবহার করুন।

কেন Apple iPhone-এ Drawer সুপারিশ করে না?

Apple HIG (2026) বলে: সাইড মেনু কন্টেন্ট লুকায় এবং প্রত্যক্ষ ম্যানিপুলেশন নীতি লঙ্ঘন করে। iOS নেভিগেশনের জন্য Tab Bar সুপারিশ করে। iPhone-এ Drawer শুধুমাত্র সেটিংস এবং অতিরিক্ত কাজের জন্য ব্যবহৃত হয়, মূল নেভিগেশনের জন্য নয়। iPad-এ, Drawer UISplitViewController দ্বারা প্রতিস্থাপিত হয়, যা সিস্টেম মানক।

Drawer-এর জন্য সোয়াইপ জেসচার কীভাবে পরিচালনা করবেন?

Android-এ, DrawerLayout স্বয়ংক্রিয়ভাবে বাম প্রান্ত থেকে সোয়াইপ পরিচালনা করে। iOS-এ, কাস্টম Drawer-এর জন্য UIPanGestureRecognizer বা Edge Pan Gesture (SwiftUI — DragGesture সহ .gesture) প্রয়োজন। গুরুত্বপূর্ণ: সোয়াইপকে সিস্টেম "পিছনে" জেসচারের সাথে বিরোধ করতে হবে — iOS-এ বাম প্রান্ত সিস্টেম জেসচার দ্বারা দখল করা।

Drawer কি ডান দিকে তৈরি করা যায়?

হ্যাঁ। Android-এ, NavigationView-এর জন্য android:layout_gravity="end" নির্দিষ্ট করুন। iOS-এ, edge: .trailing সহ মেনু তৈরি করুন। ডান দিকের Drawer কম ব্যবহৃত হয় — অতিরিক্ত অপশন, ফিল্টার বা চ্যাটের জন্য। মূল নেভিগেশন Material Design এবং ব্যবহারকারীর প্রত্যাশা অনুযায়ী বাম দিকে থাকে।

সংক্ষিপ্তসার

  • Drawer — 6+ সেকশনের জন্য সাইড নেভিগেশন মেনু, সোয়াইপ বা হ্যামবার্গার ট্যাপে স্লাইড হয়
  • DrawerLayout (Android) — NavigationUI-এর মাধ্যমে Navigation Component ইন্টিগ্রেশন সহ স্ট্যান্ডার্ড ViewGroup
  • SideMenu (iOS) — কাস্টম Drawer-এর জন্য জনপ্রিয় লাইব্রেরি, কারণ Apple কোনো অন্তর্নির্মিত উপাদান প্রদান করে না
  • Modal vs Standard — Modal কন্টেন্ট ঢেকে দেয় (ফোন), Standard কন্টেন্ট সরিয়ে দেয় (ট্যাবলেট 900+ dp)
  • কাস্টমাইজেশন — অবতার সহ হেডার, আইটেম গ্রুপিং, ব্যাজ, সক্রিয় সেকশন হাইলাইটিং
  • UX — Drawer Bottom Navigation-এর চেয়ে 40% ধীর, কিন্তু গভীর শ্রেণিবিন্যাসের অ্যাপের জন্য প্রয়োজনীয়
  • Material 3 — NavigationView স্টাইল, আইকন, ব্যাজ এবং কাস্টম হেডার লেআউট সমর্থন করে

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন