How to Implement SnackBar in Android.

Android 5.0 introduced the material design bring the all new design, patterns, widgets and much more. If you not familiar with material design start here.  Here I will talk about SnackBar introduced in Android Material Design. Snack bar is similar android Toast.

Before you can use Snack bar in your Application you need to add following support design dependency

compile 'com.android.support:design:23.1.1'

Snackbar can also contain  Button, which makes it different from Toast.

Snackbar can be shown as follows consisting a message like Toast.

Snackbar.make(view, "CoderzPassion Snackbar", Snackbar.LENGTH_LONG)
                       .setAction("Action", null).show();

 SnackBar with Button

snackbarwithbutton=Snackbar.make(findViewById(android.R.id.content), "Snackbar with Button", Snackbar.LENGTH_LONG)
                       .setAction("Dismiss", customSnackbarClick)
                       .setActionTextColor(Color.RED);
               snackbarwithbutton.show();

Now Final Code

Layout for MainActivity.java

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinatorLayout"
    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=".MainActivity">

<Button
    android:id="@+id/snackbarbutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Snackbar with Button"
    />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:layout_marginRight="20dp"
        android:src="@drawable/ic_done"
        app:fabSize="normal"
        app:layout_anchor="@id/coordinatorLayout"
        app:layout_anchorGravity="bottom|right|end"/>


</android.support.design.widget.CoordinatorLayout>

Code for MainActivity.java

package com.coderzpassion.snackbarsample;

import android.graphics.Color;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    Button snackbarbutton;
    View.OnClickListener customSnackbarClick;
    Snackbar snackbarwithbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        snackbarbutton=(Button)findViewById(R.id.snackbarbutton);
        snackbarbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                snackbarwithbutton=Snackbar.make(findViewById(android.R.id.content), "Snackbar with Button", Snackbar.LENGTH_LONG)
                        .setAction("Dismiss", customSnackbarClick)
                        .setActionTextColor(Color.RED);
                snackbarwithbutton.show();
            }
        });


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Snackbar snackBar=  Snackbar.make(view, "CoderzPassion Snackbar", Snackbar.LENGTH_LONG)
                        .setAction("Action", null);
                snackBar.show();
            }
        });

         customSnackbarClick=new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                snackbarwithbutton.dismiss();
            }
        };
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Output

androidcustomsnackbar    androidsnackbar    workingwithsnackbar