কাস্টম টুলবার লেআউট দিয়ে নোটিফিকেশন বッジ কাউন্ট প্রদর্শন
অ্যান্ড্রয়েডে নেটিভ টুলবার আইকনে বッジ (নাম্বার) দেখাতে হলে কাস্টম ভিউ ব্যবহার করতে হয়। এই উদাহরণে একটি টুলবারের 오른পাশে বাটন এবং তার উপরে একটি রেড বেজ বबल সংখ্যা দেখানো হয়েছে।
ধাপ ১: প্রজেক্ট তৈরি
Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট - কাস্টম টুলবার
<?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"
tools:context=".MainActivity">
<Toolbar
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@color/colorPrimary">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="Notify Me"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:textColor="#FFF"
android:textStyle="bold" />
<RelativeLayout
android:id="@+id/notificationBadge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true">
<RelativeLayout
android:id="@+id/badgeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8dp">
<Button
android:layout_width="36dp"
android:layout_height="36dp"
android:background="@drawable/action_notification" />
</RelativeLayout>
<TextView
android:id="@+id/tvBadgeNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/badgeLayout"
android:layout_alignEnd="@id/badgeLayout"
android:background="@drawable/item_count"
android:text="0"
android:textColor="#FFF"
android:textSize="16sp"
android:textStyle="bold" />
</RelativeLayout>
</RelativeLayout>
</Toolbar>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="16dp"
android:onClick="createNotification"
android:text="নোটিফিকেশন তৈরি করুন" />
</RelativeLayout>
ধাপ ৩: MainActivity.java - কাউন্ট আপডেট
package com.example.toolbarbadge;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public static final String CHANNEL_ID = "toolbar_badge_channel";
private static final String DEFAULT_CH = "default";
private static int notificationCount = 0;
private TextView tvBadgeNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvBadgeNumber = findViewById(R.id.tvBadgeNumber);
}
public void createNotification(View view) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("fromNotification", true);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, DEFAULT_CH)
.setContentTitle("আমার নোটিফিকেশন")
.setContentIntent(pendingIntent)
.setContentText("Notification Listener Service Example")
.setTicker("Notification Listener Service Example")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setAutoCancel(true);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel ch = new NotificationChannel(CHANNEL_ID, "Toolbar Badge Channel", NotificationManager.IMPORTANCE_HIGH);
builder.setChannelId(CHANNEL_ID);
if (nm != null) nm.createNotificationChannel(ch);
}
if (nm != null) nm.notify((int) System.currentTimeMillis(), builder.build());
// ★ কাউন্ট বাড়ানো এবং UI আপডেট
notificationCount++;
tvBadgeNumber.setText(String.valueOf(notificationCount));
}
}
ধাপ ৪: ড্রয়েবল - বেজ ব্যাকগ্রাউন্ড (রেড সার্কেল)
res/drawable/item_count.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="https://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="#2196F3" /> <!-- নীল রঙ, চাইলে লাল #FF0000 দিন -->
<stroke android:width="1dip" android:color="#FFF" />
<padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp" />
</shape>
ধাপ ৫: নোটিফিকেশন আইকন ড্রয়েবল
res/drawable/action_notification.xml (Vector Asset বা PNG ব্যবহার করুন):
<vector xmlns:android="https://schemas.android.com/apk/res/android"
android:width="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportHeight="24">
<path android:fillColor="#FFF" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.9,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32V4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
</vector>
ধাপ ৬: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.toolbarbadge">
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.ToolbarBadge">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
পরীক্ষা
অ্যাপ রান করুন। প্রতিবার "নোটিফিকেশন তৈরি করুন" চাপলে টুলবারের ডান পাশের বেল আইকনের উপরে সংখ্যা বাড়বে (১, ২, ৩...।)