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 bySample 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.3.3
  • 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:[email protected]' //Google Material Icons
implementation 'com.mikepenz:fontawesome-typeface:[email protected]'     //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:[email protected]') {
        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:[email protected]') {
        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
  • [6.1.2] Log contains error log message

    [6.1.2] Log contains error log message

    E FastAdapter: The bindView method of this item should set the `Tag` on its itemView (

    I reopen bug: #2729

    You wrote "use kotlin", but I can't use kotlin version lib due to this bug: #2786

    You wrote "use kotlin classes inside java project", but I can't migrate these classes from java to kotlin.

    Now I try to extend all DrawerItem.... classes and add viewHolder.itemView.setTag(, this);

    public class ExpandableDrawerItemBase extends ExpandableDrawerItem {
        public void bindView(ViewHolder viewHolder, List payloads) {
            viewHolder.itemView.setTag(, this);
            super.bindView(viewHolder, payloads);

    But it doesnt work :(

    How can I resolve this issue? Do you have java sources for 6.1.2 lib?

    Details [ ] Used library version: com.mikepenz:materialdrawer:6.1.2

    [ ] Used support library version: 'androidx.legacy:legacy-support-v4:1.0.0' 'androidx.legacy:legacy-support-v4:1.0.0' 'androidx.legacy:legacy-support-v13:1.0.0'

    [ ] Used gradle build tools version:

    [ ] Android Studio version: Android Studio Dolphin | 2021.3.1 Patch 1

    How can I resolve this issue?

    opened by panovvitalik 1
New style for app design simple bottom navigation with side navigation drawer UI made in Jetpack Compose.😉😎

BottomNavWithSideDrawer New style for app design simple bottom navigtaion with side navigation drawer UI made in Jetpack Compose. ?? ?? (Navigation Co

Arvind Meshram 5 Nov 24, 2022
Jetpack Compose BottomDrawerScaffold (Material Bottom Drawer)

BottomDrawerScaffold Current Compose Version: 1.0.2 Compose BottomDrawerScaffold which implements the Material Bottom Drawer

Alexander Karkossa 9 Sep 27, 2022
An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!

SlidingMenu (Play Store Demo) SlidingMenu is an Open Source Android library that allows developers to easily create applications with sliding menus li

Jeremy Feinstein 11.1k Nov 21, 2022
Navigation Drawer Bottom Navigation View

LIVE #019 - Toolbar, Navigation Drawer e BottomNavigationView com Navigation Com

Kaique Ocanha 6 Jun 15, 2022
CustomNavigationDrawer - Custom Navigation Drawer with compose

An easy sample to explore navigation component and navigation drawer from Jetpac

rafael altamirano 0 Jan 4, 2022
A sleek, out of the box, easy to understand and use, swipe gesture based Navigational Library for android.

Facilis Swipe gesture based navigational library for Android. Watch Demo Video: Getting Started To get this project into your build: Gradle Add it in

Prem Suman 35 Feb 15, 2022
A customizable and easy to use BottomBar navigation view with sleek animations, with support for ViewPager, ViewPager2, NavController, and badges.

AnimatedBottomBar A customizable and easy to use bottom bar view with sleek animations. Examples Playground app Download the playground app from Googl

Joery 1.2k Nov 21, 2022
A customizable and easy to use BottomBar navigation view with sleek animations, with support for ViewPager, ViewPager2, NavController, and badges.

A customizable and easy to use BottomBar navigation view with sleek animations, with support for ViewPager, ViewPager2, NavController, and badges.

Joery Droppers 1000 Dec 5, 2021
Animated Tab Bar is an awesome navigation extension that you can use to add cool, animated and fully customizable tab navigation in your apps

Animated Tab Bar is an awesome navigation extension that you can use to add cool, animated and fully customizable tab navigation in your apps. The extension provides handy methods and properties to change the behaviour as well as the appearance of the navigation bar.

Zain Ul Hassan 3 Jul 27, 2022
A small navigation library for Android to ease the use of fragment transactions & handling backstack (also available for Jetpack Compose).

A small navigation library for Android to ease the use of fragment transactions & handling backstack (also available for Jetpack Compose).

Kaustubh Patange 87 Oct 28, 2022
A library that you can use for bottom navigation bar. Written with Jetpack Compose

FancyBottomNavigationBar A library that you can use for bottom navigation bar. W

Alperen Çevlik 3 Jul 27, 2022
A simple & curved & material bottom navigation for Android written in Kotlin with ♥ .

A simple & curved & material bottom navigation for Android written in Kotlin with ♥ .

Hamidreza Etebarian 1.1k Nov 19, 2022
Android Library for making animated tutorials inside your app

##SlidingTutorial Cleveroad introduces Sliding Tutorial Library for Android Hey guys, hope you haven’t started developing a tutorial for your Android

Cleveroad 2.5k Nov 29, 2022
Alligator is a modern Android navigation library that will help to organize your navigation code in clean and testable way.

Alligator Alligator is a modern Android navigation library that will help to organize your navigation code in clean and testable way. Features Any app

Artur Artikov 291 Nov 24, 2022
DSC Moi University session on using Navigation components to simplify creating navigation flow in our apps to use best practices recommended by the Google Android Team

Navigation Components Navigate between destination using safe args How to use the navigation graph and editor How send data between destinations Demo

Breens Mbaka 6 Feb 3, 2022
Android Navigation Fragment Share Element Example: Use Share Element Transition with recyclerView Item and ViewPager2 Item.

Android-Navigation-Fragment-Share-Element-Example 说明 Android 使用Navigation导航切换Fragment中使用共享元素过渡动画的例子:将在listFragment的RecyclerView的Item共享元素过渡到pagerFragme

null 3 Sep 28, 2022
Use Fragment like Activity

Fragivity : Use Fragment like Activity English | 中文文档 Fragivity is a library used to build APP with "Single Activity + Multi-Fragments" Architecture R

fundroid 278 Nov 22, 2022
NavigationAndFragments - A use case for fragments and navigation

NavigationAndFragments A use case for fragments and navigation. To implement this use case, follow these steps : Create a new fragment navigation xml

Google Developers 3 Sep 15, 2022
Dismiss your keyboard by tapping anywhere outside it.

Keyboard Dismisser What is this? Keyboard Dismisser is a simple library that allows you to dismiss keyboard by tapping anywhere outside it. Currently

Gabriel Samojło 49 Nov 28, 2021