The flexible, easy to use, all in one drawer library for your Android project. Now brand new with material 2 design.



... the flexible, easy to use, all in one drawer library for your Android project.

What's included πŸš€ β€’ Setup πŸ› οΈ β€’ Migration Guide 🧬 β€’ WIKI / FAQ πŸ“– β€’ Used by β€’ Sample App

What's included πŸš€

  • the easiest possible integration
  • uses the androidX support libraries
  • compatible down to API Level 16
  • includes an AccountSwitcher
  • quick and simple api
  • follows the NEW Google Material Design Guidelines
  • use vector (.svg) icons and icon fonts via the Android-Iconics integration
  • Google Material Design Icons, Google Material Community Design Icons, FontAwesome and more
  • comes with various themes which help to get your own themes clean
  • modify the colors on the go
  • comes with multiple default drawer items
  • based on a RecyclerView
  • RTL support
  • Gmail like MiniDrawer
  • expandable items
  • badge support
  • define custom drawer items
  • tested and stable
  • sticky footer or headers
  • absolutely NO limits
  • NavController support by @petretiandrea

If you upgrade from < 8.0.0 follow the MIGRATION GUIDE


Screenshots πŸŽ‰



Latest releases πŸ› 

  • Kotlin && New | v8.4.0
  • Kotlin | v7.0.0 | (Builder approach like v6.x)
  • Java && AndroidX | v6.1.2
  • Java && AppCompat | v6.0.9

1. Provide the gradle dependency

implementation "com.mikepenz:materialdrawer:${lastestMaterialDrawerRelease}"

//required support lib modules
implementation "androidx.appcompat:appcompat:${versions.appcompat}"
implementation "androidx.recyclerview:recyclerview:${versions.recyclerView}"
implementation "androidx.annotation:annotation:${versions.annotation}"
implementation "${versions.material}"
implementation "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}"

// Add for NavController support
implementation "com.mikepenz:materialdrawer-nav:${lastestMaterialDrawerRelease}"

// Add for Android-Iconics support
implementation "com.mikepenz:materialdrawer-iconics:${lastestMaterialDrawerRelease}"

You can find dependency versions and all library releases on MVN Repository.

2. Add the Drawer into the XML

The MaterialDrawerSliderView has to be provided as child of the DrawerLayout and will as such act as the slider

<androidx.drawerlayout.widget.DrawerLayout xmlns:android=""

    ... your content ...

        android:fitsSystemWindows="true" />

3. Add the DrawerStyle to your theme

<style name="SampleApp.DayNight" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="materialDrawerStyle">@style/Widget.MaterialDrawerStyle</item>
    <item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>

Great. Your drawer is now ready to use.

Additional Setup

Add items and adding some functionality

//if you want to update the items at a later time it is recommended to keep it in a variable
val item1 = PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_home; identifier = 1 }
val item2 = SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; identifier = 2 }

// get the reference to the slider and add the items
	    SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings }

// specify a click listener
slider.onDrawerItemClickListener = { v, drawerItem, position ->
    // do something with the clicked item :D

Selecting an item

//set the selection to the item with the identifier 1
//set the selection to the item with the identifier 2
//set the selection and also fire the `onItemClick`-listener
slider.setSelection(1, true)

By default, when a drawer item is clicked, it becomes the new selected item. If this isn't the expected behavior, you can disable it for this item using isSelectable = false:

SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_dialog; isSelectable = false }

Modify items or the drawer

//modify an item of the drawer
item1.apply {
  nameText = "A new name for this drawerItem"; badge = StringHolder("19")
  badgeStyle = BadgeStyle().apply { textColor = ColorHolder.fromColor(Color.WHITE); color = ColorHolder.fromColorRes(R.color.md_red_700) }
//notify the drawer about the updated element. it will take care about everything else

//to update only the name, badge, icon you can also use one of the quick methods
slider.updateName(1, "A new name")

//the result object also allows you to add new items, remove items, add footer, sticky footer, ..
slider.addStickyFooterItem(PrimaryDrawerItem().apply { nameTest = "StickyFooter" })

//remove items with an identifier

//open / close the drawer

//get the reference to the `DrawerLayout` itself

Add profiles and an AccountHeader

// Create the AccountHeader
headerView = AccountHeaderView(this).apply {
    attachToSliderView(slider) // attach to the slider
        ProfileDrawerItem().apply { nameText = "Mike Penz"; descriptionText = "[email protected]"; iconRes = R.drawable.profile; identifier = 102 }
    onAccountHeaderListener = { view, profile, current ->
        // react to profile changes

Android-Iconics support

The MaterialDrawer provides an extension for the Android-Iconics library. This allows you to create your DrawerItems with an icon from any font.

Choose the fonts you need. Available Fonts

// Add for Android-Iconics support
implementation "com.mikepenz:materialdrawer-iconics:${lastestMaterialDrawerRelease}"

// fonts
implementation 'com.mikepenz:google-material-typeface:x.y.z@aar' //Google Material Icons
implementation 'com.mikepenz:fontawesome-typeface:x.y.z@aar'     //FontAwesome
//now you can simply use any icon of the Google Material Icons font
PrimaryDrawerItem().apply { iconicsIcon = GoogleMaterial.Icon.gmd_wb_sunny }
//Or an icon from FontAwesome
SecondaryDrawerItem().apply { iconicsIcon = FontAwesome.Icon.faw_github }

Advanced Setup

For advanced usecases. Please have a look at the provided sample activities.

Load images via url

The MaterialDrawer supports fetching images from URLs and setting them for the Profile icons. As the MaterialDrawer does not contain an ImageLoading library the dev can choose his own implementation (Picasso, Glide, ...). This has to be done, before the first image should be loaded via URL. (Should be done in the Application, but any other spot before loading the first image is working too)

//initialize and create the image loader logic
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
    override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable) {

    override fun cancel(imageView: ImageView) {
    override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {
        super.set(imageView, uri, placeholder, tag)

    override fun placeholder(ctx: Context): Drawable {
        return super.placeholder(ctx)

    override fun placeholder(ctx: Context, tag: String?): Drawable {
        return super.placeholder(ctx, tag)

An implementation with GLIDE v4 (See tag v6.1.1 for glide v3 sample) can be found in the sample application

JVM Target 1.8

// Since 8.1.0 the drawer includes core ktx 1.3.0 which requires jvm 1.8
kotlinOptions {
    jvmTarget = "1.8"

Style the drawer πŸ–ŒοΈ

Custom style - styles.xml

Create your custom style. If you don't need a custom theme see the next section, how you can set the colors just by overwriting the original colors.

// define a custom drawer style
<style name="Widget.MaterialDrawerStyleCustom" parent="Widget.MaterialDrawerStyle">
    <item name="materialDrawerInsetForeground">#4000</item>
    <!-- MaterialDrawer specific values -->
    <item name="materialDrawerBackground">?colorSurface</item>
    <item name="materialDrawerPrimaryText">?android:textColorPrimary</item>
    <item name="materialDrawerPrimaryIcon">?android:textColorSecondary</item>
    <item name="materialDrawerSecondaryText">?android:textColorSecondary</item>
    <item name="materialDrawerSecondaryIcon">?android:textColorSecondary</item>
    <item name="materialDrawerDividerColor">?android:textColorHint</item>
    <item name="materialDrawerSelectedBackgroundColor">?colorPrimary</item>

// define a custom header style
<style name="Widget.MaterialDrawerHeaderStyleCustom" parent="">
    <item name="materialDrawerCompactStyle">true</item>
    <item name="materialDrawerHeaderSelectionText">?colorOnSurface</item>
    <item name="materialDrawerHeaderSelectionSubtext">?colorOnSurface</item>

// define the custom styles for the theme
<style name="SampleApp" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="materialDrawerStyle">@style/Widget.MaterialDrawerStyleCustom</item>
    <item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyleCustom</item>

Adjust BezelImageView style

Overwrite the Style of the BezelImageView for the whole MaterialDrawer

<style name="BezelImageView">
    <item name="biv_maskDrawable">@drawable/material_drawer_rectangle_mask</item>
    <item name="biv_drawCircularShadow">false</item>
    <item name="biv_selectorOnPress">@color/material_drawer_primary</item>
    <item name="android:scaleType">centerInside</item>

Used by

(feel free to send me new projects)

Articles about the MaterialDrawer


Developed By


Copyright 2021 Mike Penz

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
  • MaterialDrawer v4.x.x TESTING

    MaterialDrawer v4.x.x TESTING

    Hello @ everybody

    I spent many, many, many hours on refactoring and simplifying the drawer, and i think v4.0.0 is now ready for test. As it has huge under the hood changes, i do not want to release it as normal release. First i want to make sure everything is working as expected, and nothing is missing.

    compile('com.mikepenz:materialdrawer:4.0.0.rc10-SNAPSHOT@aar') {
        transitive = true

    Things to note:

    • v4.0.0 was completely refactored, and got a lot of fundamental changes
      • the API may differ from the previous version
      • packages were renamed
      • classes were moved
      • methods were renamed / removed / moved
      • main functions were redefined or changed


    • now uses a RecyclerView
    • IDrawerItem interface changed to reflect change to RecyclerView
    • the Header & Footer is now a new DrawerItemType (API to previous version still exists and works)
    • StickyHeader & StickyFooter stay the same
    • New MiniDrawer class which creates a mini version of the drawer as view
    • setters were removed, only with* methods kept
    • withCheckable() was finally renamed to withSelectable()
    • Cleanups / Code moved / Packages moved / Classes moved / Functionality moved
    • Holder object for String, Image, Color (used in the DrawerItems)
    • Getting started from PRE v4.0.0
      • reimport not found packages
      • there are no more setter methods, to simplify the maintenance i only kept the withXYZ (builder-setters)
      • withCheckable() was finally renamed to withSelectable()
      • the OnDrawerItemClickListener has no more parent or id parameters
      • probably more, let me know in this ticket
    • v4.0.0 is new. it's different. it changes a lot. So:
      • it is still possible to redefine some functions or apis
      • rename methods to make them easier to understand
      • overthink some apis
      • move stuff / remove stuff / add stuff
    • BUG REPORTS are fine
    • IDEAS are welcome
    • THOUGHTS should be just posted here. perhaps we have to change somehting
    • PULL REQUESTS are welcome (let's just discuss the change first)
    • REDEFINE requests are also ok

    Thanks for all the help.

    You can try the sample app without coding here:

    The latest source code including an (minimal) updated README can be found here:

    enhancement help wanted 
    opened by mikepenz 140
  • (AccountSwitcher) Circle Image and details

    (AccountSwitcher) Circle Image and details

    Hey, first of this is an excellent start. Would love to be able to include this in the layout xml.

    Suggestion: If you see the image in the url, there is a big circle profile picture along with Name and E-mail. It would be amazing to provide a layout a template for that. I could work on it if you accept pull requests.

    opened by gaara87 61
  • Error:Failed to resolve: Android-Iconics:iconics-core:unspecified

    Error:Failed to resolve: Android-Iconics:iconics-core:unspecified

    Since I reconfigured my code to use v4.0.0, Android Studio does not compile! Anything I try fails with that message:

    Error:Failed to resolve: Android-Iconics:iconics-core:unspecified

    Even when I try to clean the project I get:

    Error:A problem occurred configuring project ':app'.
    > Could not resolve all dependencies for configuration ':app:_debugCompile'.
       > Could not find Android-Iconics:iconics-core:unspecified.
         Searched in the following locations:
         Required by:
             CollecteRecouris:app:unspecified > com.mikepenz:fontawesome-typeface:

    This never happened before when using v3. But, I already updated all my code to use v4, today! This is what's included in app's build.gradle:

      compile 'com.mikepenz:materialdrawer:4.0.0'
      compile 'com.mikepenz:iconics-core:1.7.3'
      compile 'com.mikepenz:fontawesome-typeface:'
    opened by bzkdjc 45
  • Set header withIcon just working one image using Glide library??

    Set header withIcon just working one image using Glide library??

    Please explain to me about this. I have 2 avatars, but only one working with Gilde library. I follow this code ( But my application like this: . Please check image in the link.

    opened by trinhvanminh2009 41
  • Set selection on SecondaryDrawerItem and fire onClick

    Set selection on SecondaryDrawerItem and fire onClick

    Hello, first of all thank you so much for this library. It's really well done and useful. My problem is that I cannot set the selection on an item, which is a "SecondaryDrawerItem". I am using the following code. result.setSelection(152, true); So my aim is to select, open and fire the click event to this drawer item, but it crashes instantly. An answer would be greatly appreciated, thanks.

    opened by FelixMittermeier 33
  • Drawer is shown fully transparent when using with Crosswalk WebView

    Drawer is shown fully transparent when using with Crosswalk WebView

    Hello! I have a strange problem with MaterialDrawer. I use Crosswalk Webview together with MaterialDrawer in my activity:

    import ...;
    import com.mikepenz.materialdrawer.Drawer;
    import com.mikepenz.materialdrawer.DrawerBuilder;
    import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
    import com.mikepenz.materialdrawer.model.SectionDrawerItem;
    import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
    import org.xwalk.core.JavascriptInterface;
    import org.xwalk.core.XWalkActivity;
    import org.xwalk.core.XWalkResourceClient;
    import org.xwalk.core.XWalkView;
    public class MainActivity extends XWalkActivity {
        private XWalkView webView;
        private Drawer drawer;
        protected void onCreate(Bundle savedInstanceState) {
            webView = (XWalkView) findViewById(;
            webView.setResourceClient(new MyResourceClient(webView,
            drawer = new DrawerBuilder()
                    .withOnDrawerListener(new DrawerListener())
                            new DrawerItemClickListener(this))
                            new PrimaryDrawerItem()
                            new PrimaryDrawerItem()
                            new PrimaryDrawerItem()
                            new SectionDrawerItem()
                            new PrimaryDrawerItem()
                            new PrimaryDrawerItem()
                            new PrimaryDrawerItem()
            drawer.addStickyFooterItem(new PrimaryDrawerItem()
            drawer.addStickyFooterItem(new PrimaryDrawerItem()
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    On Android 4 it works ok, but on Android 5 and 6 the drawer is not visible when I slide from the left. But I know that all drawer items work because when I click on the area where the drawer should be, the corresponding item click event is fired. And moreover, after I click on this invisible drawer for the first time, it becomes visible until I quit the activity. When I open the activity again, it becomes invisible until first click on it again. Please watch this video for the demonstation:

    The bug is somehow connected with Crosswalk, because on my second activity, which doesn't use webview, the drawer works ok.

    Any help will be appreciated, and if some more info is needed, I'm ready to provide it.

    opened by roher-roher 33
  • documentation


    this is not a criticism, it is an offer of help.

    i look at every issue that is raised. about 80-90% of them could be resolved with some (dare i say it) better documentation. this is a very good piece of software, but i do think it is let down by the documentation.

    for me, the best way to tackle something like this is to agree on the table of contents. with that in place, the structure could be implemented in the wiki, with a placeholder in each section saying what the section should contain. then people who want to contribute can place content in these sections. furthermore, questions and answers that have already been provided can be used as a starting point.

    now writing documentation is probably my least favourite thing to do. but i am willing to help.

    enhancement help wanted 
    opened by simonckenyon 33
  • Status bar background drawn below status bar

    Status bar background drawn below status bar


    Before I begin, I just want to thank you for providing this great library! I have a situation where the status bar background is drawn below the status bar, as shown in the screenshot. It happens when my app returns to portrait orientation after displaying a fullscreen YouTube player view in landscape. I have the android:configChanges option set for my activity in the manifest to prevent my activity from being destroyed and recreated so that the YouTube video will not have to rebuffer. I tested this on 3 devices, and it only happens on Android 4.1.2. The problem doesn't occur on Android 4.4.4 and 5.1.1. I believe the issue is due to the assumption that the status bar doesn't get hidden during fullscreen on pre-sdk 19 devices, or something along those lines. Please help! Thank you!


    opened by filbertteo 29
  • How to hide and show account header

    How to hide and show account header

    How can I hide the account header? I've created the code below but I don't want the account header to be showing during runtime. The solution is 'headerResult.?' where the question mark is replaced by something but I don't know what.

        headerResult = new AccountHeaderBuilder()
                        new ProfileDrawerItem().withName("Mike Penz").withEmail("[email protected]")
        result = new DrawerBuilder()
                        new PrimaryDrawerItem().withName(R.string.greeting).withIdentifier(1).withCheckable(false)
    opened by macaronlover 28
  • Is it possible to use the same Drawer object in different activities?

    Is it possible to use the same Drawer object in different activities?


    I'm getting an error if I attempt to hold the Drawer object and display it more than once. Is it possible, for performance considerations, to create exactly one (static) Drawer and use it in other activities? I realize the best-practice would be doing one activity with fragments, but this is not the case.

    Thanks A Costi

    opened by acosti 27
  • Test MaterialDrawer v5.0.0 with FastAdapter, fitsSystemWindows

    Test MaterialDrawer v5.0.0 with FastAdapter, fitsSystemWindows

    v5.0.0 of the MaterialDrawer will internally switch to the FastAdapter which provides a highly flexible and performant Adapter implementation which allows a flexible setting of new Item's as the MaterialDrawer did it in the past.

    This is a huge step as it will bring new features in the future.

    Changes for this are currently on the FastAdapter branch (

    Via this dependency:

    compile('com.mikepenz:materialdrawer:5.0.0.b27-SNAPSHOT@aar') {
        transitive = true

    As this is just a SNAPSHOT at the moment it is only available on the SNAPSHOTS repo of maven central. You can add it like done here:

    Please test and report back

    help wanted question 
    opened by mikepenz 27
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
Navigation Drawer Activity with material design style and simplified methods

MaterialNavigationDrawer Navigation Drawer Activity with material design style and simplified methods       It requires 10+ API and android support v7

Fabio Biola 1.6k Jan 5, 2023
Custom drawer implementation for Material design apps.

material-drawer Custom drawer implementation for Material design apps. Demo A demo app is available on Google Play: Screenshots Fixed items Select pro

Jan Heinrich Reimer 600 Nov 18, 2022
Showcase of the new AppCompat 21, which includes new Material Theme, working in pre-21 devices.

MaterialEverywhere (deprecated) This example is deprecated, I recommend taking a look at MaterializeYourApp repository. Showcase of the new AppCompat

Antonio Leiva 1.3k Dec 17, 2022
A Material Design ViewPager easy to use library

MaterialViewPager Material Design ViewPager easy to use library Sample And have a look on a sample Youtube Video : Youtube Link Download In your modul

Florent CHAMPIGNY 8.2k Jan 1, 2023
A Gmail-like Material Drawer implementation

AdvancedMaterialDrawer A Gmail-like Material Drawer implementation Based on neokree's MaterialDrawer library, but they are not the same. I have made m

Marc SchΓ€fers 200 Oct 27, 2022
Easy creation and management of toggle buttons on Android from the Material Design spec.

ToggleButtonLayout Easy creation and management of toggle buttons from the Material Design spec. Read more about ToggleButtonLayout in our blog post.

Savvy 229 Jan 9, 2023
Android Sample Project with Material Design and Toolbar.

AndroidMaterialDesignToolbar -- PROJECT IS NOT SUPPORTED Android Sample Project with Material Design and Toolbar. Project use Appcompat library for ma

kemal selim tekinarslan 713 Nov 11, 2022
Animations for Android L drawer, back, dismiss and check icons

Material Menu Morphing Android menu, back, dismiss and check buttons Have full control of the animation: Including in your project compile 'com.balysv

Balys Valentukevicius 2.5k Jan 3, 2023
A library to bring fully animated Material Design components to pre-Lolipop Android.

Material MaterialLibrary is an Open Source Android library that back-port Material Design components to pre-Lolipop Android. MaterialLibrary's origina

Rey Pham 6k Dec 21, 2022
[] Android Library that implements Snackbars from Google's Material Design documentation.

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 a

null 1.5k Dec 16, 2022
A library support form with material design, construct same with Android UI Framework

SwingUI A slight Java Swing library support form with material design, construct same with Android UI Framework writen in Kotlin Supported: 1. Screen:

Cuong V. Nguyen 3 Jul 20, 2021
Material Shadows for android : A library for supporting convex material shadows

MaterialShadows A library for seamlessly integrating Material shadows. The library takes existing material shadows to next level by adding the followi

Harjot Singh Oberai 2.2k Dec 19, 2022
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Dec 26, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 2022
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Jan 9, 2023
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Jan 3, 2023
Android Material Design Components

Android-Material-Design-Components Material design is a comprehensive guide for visual, motion, and interaction design across platforms and devices. G

Velmurugan Murugesan 3 Jun 10, 2022