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

অ্যান্ড্রয়েডে বটম শীট (Bottom Sheet) উইজেট ইমপ্লিমেন্ট করা

Material Design Bottom Sheet বাস্তবায়ন

এই উদাহরণে BottomSheetBehavior এবং CoordinatorLayout ব্যবহার করে একটি বটম শীট উইজেট তৈরি করা হয়েছে।

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

Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।

দ্বিতীয় ধাপ: ডিপেন্ডেন্সি যোগ করুন

build.gradle (Module: app) - Material Design এবং ButterKnife লাইব্রেরি:

implementation 'com.android.support:design:28.0.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

নোট: বর্তমানে AndroidX ব্যবহার করুন - com.google.android.material:material:1.10.0 এবং ButterKnife-এর পরিবর্তে View Binding ব্যবহার করুন।

তৃতীয় ধাপ: মূল লেআউট (CoordinatorLayout)

res/layout/activity_main.xml - টুলবার, কন্টেন্ট এবং বটম শীট ইনক্লুড:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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">
    
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/Widget.Support.CoordinatorLayout" />
    </android.support.design.widget.AppBarLayout>
    
    <include layout="@layout/content" />
    <include layout="@layout/bottomsheet" />
    
</android.support.design.widget.CoordinatorLayout>

চতুর্থ ধাপ: বটম শীট লেআউট

res/layout/bottomsheet.xml - BottomSheetBehavior অ্যাট্রিবিউটসহ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    android:id="@+id/bottomSheet"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="4dp"
    app:behavior_hideable="true"
    app:behavior_peekHeight="10dp"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical"
        android:weightSum="3">
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="Order Details"
            android:textColor="#444"
            android:textSize="18dp"
            android:textStyle="bold" />
        <TextView
            android:layout_width="0dp"
            android:gravity="right"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textStyle="bold"
            android:textSize="15dp"
            android:text="₹435.00"/>
    </LinearLayout>
    
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chicken BBQ" />
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chicken Biriyani" />
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Delivery Address" android:textColor="#444" android:textStyle="bold" />
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Flat No 404, India, Chennai" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:background="#000"
        android:text="PROCEED PAYMENT"
        android:textColor="#fff" />
</LinearLayout>

পঞ্চম ধাপ: কন্টেন্ট লেআউট

res/layout/content.xml - বটম শীট খোলার বাটন:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="MainActivity"
    tools:showIn="@layout/activity_main">
    <Button
        android:id="@+id/btnBottomSheet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Bottom Sheet"
        android:layout_centerInParent="true"/>
</RelativeLayout>

ষষ্ঠ ধাপ: মেইন এক্টিভিটিতে বটম শীট লজিক

src/MainActivity.java - ButterKnife এবং BottomSheetBehavior ব্যবহার:

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.btnBottomSheet) Button btnBottomSheet;
    @BindView(R.id.bottomSheet) LinearLayout layoutBottomSheet;
    
    BottomSheetBehavior sheetBehavior;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        
        Toolbar toolbar = findViewById(R.id.toolbar);
        // setSupportActionBar(toolbar);
        
        sheetBehavior = BottomSheetBehavior.from(layoutBottomSheet);
        
        sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                switch (newState) {
                    case BottomSheetBehavior.STATE_HIDDEN:
                        break;
                    case BottomSheetBehavior.STATE_EXPANDED:
                        btnBottomSheet.setText("Close Sheet");
                        break;
                    case BottomSheetBehavior.STATE_COLLAPSED:
                        btnBottomSheet.setText("Expand Sheet");
                        break;
                    case BottomSheetBehavior.STATE_DRAGGING:
                    case BottomSheetBehavior.STATE_SETTLING:
                        break;
                }
            }
            
            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
                // স্লাইড সময় অ্যানিমেশন বা প্রগ্রেস হ্যান্ডল করতে পারেন
            }
        });
    }
    
    @OnClick(R.id.btnBottomSheet)
    public void toggleBottomSheet() {
        if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
            sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
            btnBottomSheet.setText("Close sheet");
        } else {
            sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            btnBottomSheet.setText("Expand sheet");
        }
    }
}

সপ্তম ধাপ: ম্যানিফেস্ট ফাইল

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <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">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

BottomSheetBehavior স্টেটসমূহ

  • STATE_COLLAPSED - সংকুচিত (peekHeight তলയ്ക്കে)
  • STATE_EXPANDED - সম্পূর্ণ প্রসারিত
  • STATE_DRAGGING - ব্যবহারকারী টেনে টান করছে
  • STATE_SETTLING - এনিমেশন চলছে
  • STATE_HIDDEN - লুকানো (behavior_hideable=true হলে)

আধুনিক বাস্তবায়ন (AndroidX + View Binding)

  • Dependency: implementation 'com.google.android.material:material:1.10.0'
  • BottomSheetDialogFragment ব্যবহার করে মডাল বটম শীট বানান
  • View Binding ব্যবহার করে findViewById এবং ButterKnife এড়িয়ান

অ্যাপ্লিকেশন চালান

"Show Bottom Sheet" বাটনে ক্লিক করলে নিচ থেকে শীট স্লাইড আপ হবে। আবার ক্লিক করলে বন্ধ হবে।

অ্যান্ড্রয়েডে বটম শীট (Bottom Sheet) উইজেট ইমপ্লিমেন্ট করা অ্যান্ড্রয়েডে বটম শীট (Bottom Sheet) উইজেট ইমপ্লিমেন্ট করা

  1. অ্যান্ড্রয়েডে কাস্টম AlertDialog ভিউ কীভাবে বাস্তবায়ন করবেন?

  2. অ্যান্ড্রয়েডে ScrollView প্রোগ্রাম্যাটিক্যালি ডিজেবল করার পদ্ধতি

  3. Android Switch উইজেট কাস্টমাইজ করার পদ্ধতি (স্টাইলিং)

  4. Tkinter-এ Button উইজেট আপডেট কীভাবে করবেন?