Android Notification Styling

Filed Under: Android

We’ve discussed and implemented basic Notifications in this post. In this tutorial, we’ll be looking into more advanced features of android notification and styling our notifications in different ways.

Android Notification Styling

Android Notification have plenty of powerful features that when used correctly would significantly improve the UX and user engagement. Some noteworthy features that we’ll be covering in this Android Notification tutorial are listed below.

  1. Notification Actions
  2. Heads Up Notification
  3. Big Text Style Notification
  4. Big Picture Style Notification
  5. Inbox Style Notification
  6. Message Style Notification

Android notification consists of three major components:

  1. Small Icon (often our app logo)
  2. Title
  3. Content Text

The introduction of Android Nougat (API 24) has given a new look to notifications as shown below.

android notification example

The large icon now appears on the right. There’s an arrow besides the notification title that lets us expand, collapse the notification.

In this tutorial, we’ll be styling our notifications using some pre-defined awesome styles that Android has in store for us. We’ll be covering the following features at length.

  1. Android Notification Actions
  2. Heads Up Notifications
  3. Rich Notifications

Android Notification Actions

Android Notification actions are basically buttons placed below the body of the notification. A Notification action must include an icon, a label, and a PendingIntent to be fired when the action is selected by the user.

With the Introduction of Android N, the icons are omitted from the action buttons to give space to other components.

An example of notification actions in Pre Nougat devices is given below.

android notification before android N

Pre-Nougat Notification Action Design

An example of Notification Actions in Android N and above is given below.

android notification tutorial

Notification Action in Android Nougat

Heads Up Notifications

With the introduction of Android Lollipop (API level 21), notifications can appear in a small floating window (also called a heads-up notification) when the device is active (that is, the device is unlocked and its screen is on).

Such type of notifications are commonly seen when you’re using an application and you get a call. A small floating notification known as heads up notifications pops up with the notification actions to accept or decline a call.

Rich Notifications

Android allows us to add rich styles to our application with the introduction of Android L. Using these styles would make the notification look more appealing than ever. Some of the known styles that are used in many applications are listed below and are self-explanatory.

  • BigTextStyle
  • BigPictureStyle
  • InboxStyle
  • MessageStyle

We know that notifications on Android N can be expanded using the arrows. To expand notifications on pre-Nougat versions, you can swipe down over the notification using two fingers.

Not all Android versions would support the above styles. In case an Android OS doesn’t support the rich style, that style would simply be ignored.

Now let’s jump into the business end of this tutorial and develop an application that’ll have all the above features.

Android Notification Tutorial Project Structure

android notification tutorial project

Android Notification Tutorial Code

The code for the activity_main.xml is given below:


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.journaldev.stylingnotifications.MainActivity">

    <Button
        android:id="@+id/btnNotificationActions"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NOTIFICATION ACTIONS"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.196" />

    <Button
        android:id="@+id/btnHeadsUp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:text="HEADS UP NOTIFICATION"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnNotificationActions" />

    <Button
        android:id="@+id/btnBigTextStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BIG TEXT STYLE"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/btnHeadsUp" />

    <Button
        android:id="@+id/btnBigPictureStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BIG PICTURE STYLE"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/btnBigTextStyle" />

    <Button
        android:id="@+id/btnInboxStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="INBOX STYLE"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/btnBigPictureStyle" />

    <Button
        android:id="@+id/btnMessageStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="MESSAGE STYLE"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/btnInboxStyle" />

</android.support.constraint.ConstraintLayout>

We’ve added a button for each type of notification that we’ll be discussing.

The skeleton code for the MainActivity.java is given below.


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btnNotificationActions, btnHeadsUpNotification, btnBigTextStyle, btnBigPictureStyle,
            btnInboxStyle, btnMessageStyle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        clearNotification();

        btnNotificationActions = (Button) findViewById(R.id.btnNotificationActions);
        btnHeadsUpNotification = (Button) findViewById(R.id.btnHeadsUp);
        btnBigTextStyle = (Button) findViewById(R.id.btnBigTextStyle);
        btnBigPictureStyle = (Button) findViewById(R.id.btnBigPictureStyle);
        btnInboxStyle = (Button) findViewById(R.id.btnInboxStyle);
        btnMessageStyle = (Button) findViewById(R.id.btnMessageStyle);
        btnNotificationActions.setOnClickListener(this);
        btnHeadsUpNotification.setOnClickListener(this);
        btnBigTextStyle.setOnClickListener(this);
        btnBigPictureStyle.setOnClickListener(this);
        btnInboxStyle.setOnClickListener(this);
        btnMessageStyle.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnNotificationActions:
                notificationActions();
                break;
            case R.id.btnHeadsUp:
                headsUpNotification();
                break;
            case R.id.btnBigTextStyle:
                bigTextStyleNotification();
                break;
            case R.id.btnBigPictureStyle:
                bigPictureStyleNotification();
                break;
            case R.id.btnInboxStyle:
                inboxStyleNotification();
                break;
            case R.id.btnMessageStyle:
                messageStyleNotification();
                break;

        }
    }


   public PendingIntent getLaunchIntent(int notificationId, Context context) {

        Intent intent = new Intent(context, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.putExtra("notificationId", notificationId);
        return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    }


    private void clearNotification() {
        int notificationId = getIntent().getIntExtra("notificationId", 0);

        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(notificationId);
    }

  private void notificationActions()
  {
   //Logic goes here.
  }

  private void headsUpNotification()
  {
   //Logic goes here.
  }

  private void bigTextStyleNotification()
  {
   //Logic goes here.
  }

  private void bigPictureStyleNotification();
  {
   //Logic goes here.
  }

  private void inboxStyleNotification()
  {
   //Logic goes here.
  }

  private void messageStyleNotification()
  {
   //Logic goes here.
  }
}

The method clearNotification() is used to clear any existing notifications from the notification bar.
The method getLaunchIntent() returns an instance of PendingIntent which when triggered from the notification, will relaunch the application.

Before we delve into the implementation of each type of notification, let’s define the BroadcastReceiver as shown below.


package com.journaldev.stylingnotifications;

import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class NotificationReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        int notificationId = intent.getIntExtra("notificationId", 0);

        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(notificationId);
    }
}

Update the AndroidManifest.xml file with the receiver defined as shown below.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.journaldev.stylingnotifications">

    <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">

        <receiver android:name=".NotificationReceiver"
            android:exported="false"/>


        <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>

Adding actions inside a notification


private void notificationActions() {

        int NOTIFICATION_ID = 1;


        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Notification Actions");
        builder.setContentText("Tap View to launch our website");
        builder.setAutoCancel(true);
        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.journaldev.com"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);

        builder.setContentIntent(launchIntent);
        builder.addAction(android.R.drawable.ic_menu_view, "VIEW", pendingIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

In the above code, we set the various styles on the instance builder.

setColor() sets the custom color for the notification icon, title and action button texts.

addAction() is used to set the action buttons beneath the notification content. It expects three params: icon, text and the instance of PendingIntent.

setContentIntent() sets the PendingIntent that’ll be triggered when the body of the notification is clicked. In the above code we’ve simply added the PendingIntent to relaunch the application.

setAutoCancel(true) is used to dismiss the notification when its clicked.

NotificationManager class is used to display the notification.

The output of the application when the above type of notification is triggered is given below.
android notification example

Note:

  • When the VIEW button is clicked, the url is launched in the browser but the notification isn’t dismissed.
  • When the DISMISS button is clicked the notification is cleared but the notification tray stays open.
  • When the Notification content is clicked, the notification is dismissed as well as the activity is re-launched. This is where getLaunchIntent() and clearNotification() methods are invoked.

Implementing Heads Up Notification


private void headsUpNotification() {

        int NOTIFICATION_ID = 1;
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.jd)
                        .setContentTitle("Heads Up Notification")
                        .setContentText("View the latest Swift Tutorial")
                        .setAutoCancel(true)
                        .setDefaults(NotificationCompat.DEFAULT_ALL)
                        .setPriority(NotificationCompat.PRIORITY_HIGH);

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.journaldev.com/15126/swift-function"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);

        builder.addAction(android.R.drawable.ic_menu_view, "VIEW", pendingIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

To set a notification as heads up notification, two properties need to set on the builder instance.

setDefaults(NotificationCompat.DEFAULT_ALL)
setPriority(NotificationCompat.PRIORITY_HIGH)

Swiping a heads up notification would dismiss it. If it’s not dismissed, the heads-up notifications will fade away and change into a standard notification in the status bar.

The output of heads up notification is given below.
android notification heads up

BigTextStyle Notification


private void bigTextStyleNotification() {
        int NOTIFICATION_ID = 1;

        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());
        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);


        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Big Text Style");
        builder.setStyle(new NotificationCompat.BigTextStyle().bigText(getResources().getString(R.string.lorem_ipsum)));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);
        builder.addAction(android.R.drawable.ic_menu_send, "OPEN APP", launchIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

A notification can be customised into a big text style notification by setting the style as
NotificationCompat.BigTextStyle(). The string to be displayed is entered inside the method bigText().

The output of above type of notification is given below.
android notification big text style

BigPictureStyle Notification


private void bigPictureStyleNotification() {
        int NOTIFICATION_ID = 1;
        Bitmap pic = BitmapFactory.decodeResource(getResources(), R.drawable.bg);

        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);
        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Big Picture Style");
        builder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(pic));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

For BigPicture to be displayed inside a notification the style is set as NotificationCompat.BigPictureStyle().bigPicture(bitmap)).

The output with the above type of notification is given below.
android notification custom style big picture

InboxStyle Notification


private void inboxStyleNotification() {
        int NOTIFICATION_ID = 1;

        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setStyle(new NotificationCompat.InboxStyle().addLine("Hello").addLine("Are you there?").addLine("How's your day?").setBigContentTitle("3 New Messages for you").setSummaryText("Inbox"));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

An inbox style notification is set by using the style new NotificationCompat.InboxStyle().
Each message is placed inside the method addLine(). The summary text of all the messages is placed inside the method setSummaryText().
setContentTitle() is replaced with setBigContentTitle() in this style

The output of the above type of notification is given below
custom android notification inbox style

Message Style Notification

Message Style is introduced with Android N. Typically used for chats.


private void messageStyleNotification() {
        int NOTIFICATION_ID = 1;

        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Messages");
        builder.setStyle(new NotificationCompat.MessagingStyle("Teacher").setConversationTitle("Q&A Group")
                .addMessage("This type of notification was introduced in Android N. Right?",0,"Student 1")
                .addMessage("Yes",0,null)
                .addMessage("The constructor is passed with the name of the current user. Right?",0,"Student 2")
                .addMessage("True",0,null));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

In the above code NotificationCompat.MessagingStyle(String) contains a string that represents the current user(Typically in a chat its you!).
Each message is added in the method addMessage() with the timestamp as well as sender name.
If the sender name is set to null it signifies that the message is from the current user(you) and the name is taken from the constructor.

The output of the above type of notification is given below.
android message style notification

Adding all the above methods in the MainActivity.java would give us the below code.


package com.journaldev.stylingnotifications;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btnNotificationActions, btnHeadsUpNotification, btnBigTextStyle, btnBigPictureStyle,
            btnInboxStyle, btnMessageStyle;

    NotificationCompat.Builder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        clearNotification();

        btnNotificationActions = (Button) findViewById(R.id.btnNotificationActions);
        btnHeadsUpNotification = (Button) findViewById(R.id.btnHeadsUp);
        btnBigTextStyle = (Button) findViewById(R.id.btnBigTextStyle);
        btnBigPictureStyle = (Button) findViewById(R.id.btnBigPictureStyle);
        btnInboxStyle = (Button) findViewById(R.id.btnInboxStyle);
        btnMessageStyle = (Button) findViewById(R.id.btnMessageStyle);
        btnNotificationActions.setOnClickListener(this);
        btnHeadsUpNotification.setOnClickListener(this);
        btnBigTextStyle.setOnClickListener(this);
        btnBigPictureStyle.setOnClickListener(this);
        btnInboxStyle.setOnClickListener(this);
        btnMessageStyle.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnNotificationActions:
                notificationActions();
                break;
            case R.id.btnHeadsUp:
                headsUpNotification();
                break;
            case R.id.btnBigTextStyle:
                bigTextStyleNotification();
                break;
            case R.id.btnBigPictureStyle:
                bigPictureStyleNotification();
                break;
            case R.id.btnInboxStyle:
                inboxStyleNotification();
                break;
            case R.id.btnMessageStyle:
                messageStyleNotification();
                break;

        }
    }

    private void notificationActions() {

        int NOTIFICATION_ID = 1;


        builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Notification Actions");
        builder.setContentText("Tap View to launch our website");
        builder.setAutoCancel(true);
        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.journaldev.com"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);

        builder.setContentIntent(launchIntent);
        builder.addAction(android.R.drawable.ic_menu_view, "VIEW", pendingIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);

        buildNotification(NOTIFICATION_ID);
    }

    public PendingIntent getLaunchIntent(int notificationId, Context context) {

        Intent intent = new Intent(context, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.putExtra("notificationId", notificationId);
        return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    }


    private void clearNotification() {
        int notificationId = getIntent().getIntExtra("notificationId", 0);

        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(notificationId);
    }

    private void headsUpNotification() {

        int NOTIFICATION_ID = 1;
        builder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.jd)
                        .setContentTitle("Heads Up Notification")
                        .setContentText("View the latest Swift Tutorial")
                        .setAutoCancel(true)
                        .setDefaults(NotificationCompat.DEFAULT_ALL)
                        .setPriority(NotificationCompat.PRIORITY_HIGH);

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.journaldev.com/15126/swift-function"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);

        builder.addAction(android.R.drawable.ic_menu_view, "VIEW", pendingIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);

        buildNotification(NOTIFICATION_ID);
    }

    private void bigTextStyleNotification() {
        int NOTIFICATION_ID = 1;

        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());
        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);


        builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Big Text Style");
        builder.setStyle(new NotificationCompat.BigTextStyle().bigText(getResources().getString(R.string.lorem_ipsum)));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);
        builder.addAction(android.R.drawable.ic_menu_send, "OPEN APP", launchIntent);

        buildNotification(NOTIFICATION_ID);
    }

    private void bigPictureStyleNotification() {
        int NOTIFICATION_ID = 1;

        Bitmap pic = BitmapFactory.decodeResource(getResources(), R.drawable.bg);


        Intent buttonIntent = new Intent(getBaseContext(), NotificationReceiver.class);
        buttonIntent.putExtra("notificationId", NOTIFICATION_ID);
        PendingIntent dismissIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buttonIntent, 0);
        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());


        builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Big Picture Style");
        builder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(pic));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        builder.addAction(android.R.drawable.ic_delete, "DISMISS", dismissIntent);

        buildNotification(NOTIFICATION_ID);
    }

    private void inboxStyleNotification() {
        int NOTIFICATION_ID = 1;

        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());
        builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Messages");
        builder.setStyle(new NotificationCompat.InboxStyle().addLine("Hello").addLine("Are you there?").addLine("How's your day?").setBigContentTitle("3 New Messages for you").setSummaryText("Inbox"));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);
        
        buildNotification(NOTIFICATION_ID);
    }

    private void messageStyleNotification() {
        int NOTIFICATION_ID = 1;

        PendingIntent launchIntent = getLaunchIntent(NOTIFICATION_ID, getBaseContext());
        builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.drawable.jd);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.jd));
        builder.setContentTitle("Messages");
        builder.setStyle(new NotificationCompat.MessagingStyle("Teacher").setConversationTitle("Q&A Group")
                .addMessage("This type of notification was introduced in Android N. Right?", 0, "Student 1")
                .addMessage("Yes", 0, null)
                .addMessage("The constructor is passed with the name of the current user. Right?", 0, "Student 2")
                .addMessage("True", 0, null));
        builder.setAutoCancel(true);
        builder.setContentIntent(launchIntent);

        buildNotification(NOTIFICATION_ID);
    }

    private void buildNotification(int NOTIFICATION_ID) {
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }
}

This brings an end to android notification tutorial. We’ve styled our notifications in some interesting ways. You can download the final Android notification example project from the link below.

Reference: Official Doc

Comments

  1. Green says:

    Good article, Tried it, when it click the button nothing happens,

  2. Pranish Shrestha says:

    This is the best article I found on custom notification.
    I would like to know 1 more thing. How can I set BigPictureStyle with BigTextStyle?

  3. mim says:

    You are the best.Thanks a lot.

  4. Giridhar says:

    Hey
    While adding actions to the notification, you are giving some icons from drawable, what is the use of them, they are not visible in the notification

Leave a Reply

Your email address will not be published. Required fields are marked *

close
Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages