snackbar alternatives and similar packages
Based on the "Material Widget" category.
Alternatively, view snackbar alternatives based on common mentions on social networks and blogs.
-
material-dialogs
😍 A beautiful, fluid, and extensible dialogs API for Kotlin & Android. -
MaterialDesignLibrary
This is a library with components of Android L to you use in android 2.2 -
MaterialDrawer
The flexible, easy to use, all in one drawer library for your Android project. Now brand new with material 2 design. -
MaterialViewPager
A Material Design ViewPager easy to use library -
android-floating-action-button
Floating Action Button for Android based on Material Design specification -
RippleEffect
Implementation of Ripple effect from Material Design for Android API 9+ -
Carbon
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more. -
material-menu
Animations for Android L drawer, back, dismiss and check icons -
materialish-progress
A material style progress wheel compatible with 2.3 -
MaterialDialog
An Android library for conveniently building Material Design Dialog in Android version 2.2 ~ L. -
MaterialProgressBar
Material Design ProgressBar with consistent appearance -
MaterialNavigationDrawer
Navigation Drawer Activity with material design style and simplified methods -
MaterialList
An Android library aimed to get the beautiful CardViews that Google shows at its official design specifications -
material-range-bar
Android widget for selecting a range of values. -
MaterialTabs
Custom Tabs with Material Design effects. It requires 14+ API and android support v7 (Toolbar) -
MaterialEverywhere
Showcase of the new AppCompat 21, which includes new Material Theme, working in pre-21 devices. -
Horizontal Calendar
A material horizontal calendar view for Android based on RecyclerView -
AndroidMaterialDesignToolbar
Android Sample Project with Material Design and Toolbar. -
MaterialPowerMenu
A demo of the power menu with Reveal and other animations -
CircularProgressView
A Material style circular progress bar for Android -
Material Dialogs for Android 📱
📱Android Library to implement animated, 😍beautiful, 🎨stylish Material Dialog in android apps easily. -
material-drawer
Custom drawer implementation for Material design apps. -
ZDepthShadowLayout
Android - draw z-depth shadow of MaterialDesign -
android-materialshadowninepatch
Provides 9-patch based drop shadow for view elements. Works on API level 9 or later. -
uberprogressview
:hourglass_flowing_sand: An android progress view developed after taking inspiration from Uber app. -
AdvancedMaterialDrawer
A Gmail-like Material Drawer implementation -
Android-Material-circular-button
Animated Material circular button -
Android-DialogFragments
Various DialogFragments for Android.
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of snackbar or a related project?
README
DEPRECATED
This lib is deprecated in favor of Google's Design Support Library which includes a Snackbar and is no longer being developed.
Thanks for all your support!
Snackbar
Library that implements Snackbars from Google's Material Design documentation. Works on API levels >= 8
Installation
You can import the library from source as a module or grab via Gradle:
compile 'com.nispok:snackbar:2.11.+'
Usage
Using the Snackbar
class is easy, this is how you would display it on an Activity
:
Snackbar.with(getApplicationContext()) // context
.text("Single-line snackbar") // text to display
.show(this); // activity where it is displayed
However, I recommend you use the SnackbarManager
to handle the Snackbars queue:
// Dismisses the Snackbar being shown, if any, and displays the new one
SnackbarManager.show(
Snackbar.with(myActivity)
.text("Single-line snackbar"));
If you are using getApplicationContext()
as the Context
to create the Snackbar
then you must
specify the target Activity
when calling the SnackbarManager
:
// Dismisses the Snackbar being shown, if any, and displays the new one
SnackbarManager.show(
Snackbar.with(getApplicationContext())
.text("Single-line snackbar"), myActivity);
You can place the Snackbar
at the bottom of a particular hierarchy of views. The sample app makes
use of this; check out [SnackbarImmersiveModeSampleActivity](./sample/src/main/java/com/nispok/samples/snackbar/SnackbarImmersiveModeSampleActivity.java):
SnackbarManager.show(Snackbar snackbar, ViewGroup parent) { }
SnackbarManager.show(Snackbar snackbar, ViewGroup parent, boolean usePhoneLayout) { }
If you want an action button to be displayed, just assign a label and an ActionClickListener
:
SnackbarManager.show(
Snackbar.with(getApplicationContext()) // context
.text("Item deleted") // text to display
.actionLabel("Undo") // action button label
.actionListener(new ActionClickListener() {
@Override
public void onActionClicked(Snackbar snackbar) {
Log.d(TAG, "Undoing something");
}
}) // action button's ActionClickListener
, this); // activity where it is displayed
If you need to know when the Snackbar
is shown or dismissed, assign a EventListener
to it.
This is useful if you need to move other objects while the Snackbar
is displayed. For instance,
you can move a Floating Action Button up while the Snackbar
is on screen. Note that if you only
need to override a subset of the interface methods you can extend from EventListenerAdapter
:
SnackbarManager.show(
Snackbar.with(getApplicationContext()) // context
.text("This will do something when dismissed") // text to display
.eventListener(new EventListener() {
@Override
public void onShow(Snackbar snackbar) {
myFloatingActionButton.moveUp(snackbar.getHeight());
}
@Override
public void onShowByReplace(Snackbar snackbar) {
Log.i(TAG, String.format("Snackbar will show by replace. Width: %d Height: %d Offset: %d",
snackbar.getWidth(), snackbar.getHeight(),
snackbar.getOffset()));
}
@Override
public void onShown(Snackbar snackbar) {
Log.i(TAG, String.format("Snackbar shown. Width: %d Height: %d Offset: %d",
snackbar.getWidth(), snackbar.getHeight(),
snackbar.getOffset()));
}
@Override
public void onDismiss(Snackbar snackbar) {
myFloatingActionButton.moveDown(snackbar.getHeight());
}
@Override
public void onDismissByReplace(Snackbar snackbar) {
Log.i(TAG, String.format(
"Snackbar will dismiss by replace. Width: %d Height: %d Offset: %d",
snackbar.getWidth(), snackbar.getHeight(),
snackbar.getOffset()));
}
@Override
public void onDismissed(Snackbar snackbar) {
Log.i(TAG, String.format("Snackbar dismissed. Width: %d Height: %d Offset: %d",
snackbar.getWidth(), snackbar.getHeight(),
snackbar.getOffset()));
}
}) // Snackbar's EventListener
, this); // activity where it is displayed
There are two Snackbar
types: single-line (default) and multi-line (2 lines max. Note this only applies for phones; tablets are always single-line). You can also set
the duration of the Snackbar
similar to a
Toast
.
The lengths of a Snackbar duration are:
LENGTH_SHORT
: 2sLENGTH_LONG
: 3.5s (default)LENGTH_INDEFINTE
: Indefinite; ideal for persistent errors
You could also set a custom duration.
Animation disabling is also possible.
SnackbarManager.show(
Snackbar.with(getApplicationContext()) // context
.type(Snackbar.SnackbarType.MULTI_LINE) // Set is as a multi-line snackbar
.text("This is a multi-line snackbar. Keep in mind that snackbars are " +
"meant for VERY short messages") // text to be displayed
.duration(Snackbar.SnackbarDuration.LENGTH_SHORT) // make it shorter
.animation(false) // don't animate it
, this); // where it is displayed
You can also change the Snackbar
's colors and fonts.
SnackbarManager.show(
Snackbar.with(getApplicationContext()) // context
.text("Different colors this time") // text to be displayed
.textColor(Color.GREEN) // change the text color
.textTypeface(myTypeface) // change the text font
.color(Color.BLUE) // change the background color
.actionLabel("Action") // action button label
.actionColor(Color.RED) // action button label color
.actionLabelTypeface(myTypeface) // change the action button font
.actionListener(new ActionClickListener() {
@Override
public void onActionClicked(Snackbar snackbar) {
Log.d(TAG, "Doing something");
}
}) // action button's ActionClickListener
, this); // activity where it is displayed
Finally, you can attach the Snackbar
to a AbsListView (ListView, GridView) or a RecyclerView.
SnackbarManager.show(
Snackbar.with(getApplicationContext()) // context
.type(Snackbar.SnackbarType.MULTI_LINE) // Set is as a multi-line snackbar
.text(R.string.message) // text to be displayed
.duration(Snackbar.SnackbarDuration.LENGTH_LONG)
.animation(false) // don't animate it
.attachToAbsListView(listView) // Attach to ListView - attachToRecyclerView() is for RecyclerViews
, this); // where it is displayed
It uses Roman Nurik's SwipeToDismiss sample code to implement the swipe-to-dismiss functionality. This is enabled by default. You can disable this if you don't want this functionality:
NOTE: This has no effect on apps running on APIs < 11; swiping will always be disabled in those cases
SnackbarManager.show(
Snackbar.with(SnackbarSampleActivity.this) // context
.text("Can't swipe this") // text to be displayed
.swipeToDismiss(false) // disable swipe-to-dismiss functionality
, this); // activity where it is displayed
Examples
There's a sample app included in the project. [SnackbarSampleActivity](./sample/src/main/java/com/nispok/samples/snackbar/SnackbarSampleActivity.java) is where you want to start.
Apps Using Snackbar
Contributing
If you would like to add features or report any bugs, open a PR or refer to the issues section.
Contributors
Thanks to all contributors!
License
[MIT](./LICENSE)
ChangeLog
Go to the releases section for a brief description of each release.
*Note that all licence references and agreements mentioned in the snackbar README section above
are relevant to that project's source code only.