Show a SnackBar on the top (below of the toolbar)

Stranger B. picture Stranger B. · Oct 31, 2015 · Viewed 13.8k times · Source

I'm trying to show a SnackBar on top below of the ToolBar in my MainActivity,

I've tried this code :

 mToolbar = (Toolbar) findViewById(R.id.toolbar);
 Snackbar snack = Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG);
    View view = snack.getView();
    FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams();
    params.gravity = Gravity.TOP;
    view.setLayoutParams(params);
    snack.show();

but the SnackBar is showing on the top, but not below the Toolbar.

I want something similar to Hangout application like :

Screen shot

Main Activity:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/Coordinator"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    tools:context=".MainActivity">

   <LinearLayout
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">

       <android.support.v7.widget.Toolbar

           android:id="@+id/toolbar"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:minHeight="?attr/actionBarSize"
           android:background="?attr/colorPrimary"
           android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

           <ImageView
               android:layout_width="75dp"
               android:layout_height="28dp"
               android:src="@drawable/athena"/>
      </android.support.v7.widget.Toolbar>

      <ProgressBar
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:id="@+id/progressBar5"
           android:layout_marginTop="10dp"
           android:layout_gravity="center_horizontal" />

      <android.support.v4.widget.SwipeRefreshLayout
           android:id="@+id/swipeRefreshLayout"
           android:layout_width="match_parent"
           android:layout_height="match_parent">

           <android.support.v7.widget.RecyclerView
               android:id="@+id/my_recycler_view"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:scrollbars="vertical" />
       </android.support.v4.widget.SwipeRefreshLayout>
   </LinearLayout>

    <com.melnykov.fab.FloatingActionButton
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_margin="16dp"
        fab:fab_colorNormal="@color/colorPrimary"
        android:src="@drawable/ic_action_name9" />

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

I'm using TSnackbar, the SnackBar is showing over the toolbar

TSnackbar.make(findViewById(android.R.id.content),"Hello from TSnackBar.",TSnackbar.LENGTH_LONG).show();

Answer

Shijil picture Shijil · Jul 28, 2016

set margin on top of snackbar

Snackbar snack = Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG);
View view = snack.getView();
FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity =  Gravity.CENTER_HORIZONTAL | Gravity.TOP;

// calculate actionbar height
TypedValue tv = new TypedValue();
int actionBarHeight=0;
if (getTheme().resolveAttribute(R.attr.actionBarSize, tv, true))
{
    actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
}

// set margin 
params.setMargins(0, actionBarHeight, 0, 0);

view.setLayoutParams(params);
snack.show();