javaandroidnavigation-drawerandroid-custom-viewmaterialdrawer

Android build mini navigation drawer with Icons


I want to build a fixed mini nav drawer in android. will will always be visible an not extendable, with icons only.

Something like https://github.com/mikepenz/MaterialDrawer Mini Drawer. I try used his library, but I can't figured out how to make it fixed.

here is my code:

private Drawer result = null;
private MiniDrawer miniResult = null;


result = new DrawerBuilder()
                .withActivity(this)
                .withToolbar(toolbar)
                .withTranslucentStatusBar(false)
                .addDrawerItems(
                        new PrimaryDrawerItem().withName("1").withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),
                        new PrimaryDrawerItem().withName("2").withIcon(FontAwesome.Icon.faw_home).withBadge("22").withBadgeStyle(new BadgeStyle(Color.RED, Color.RED)).withIdentifier(2).withSelectable(false),
                           new DividerDrawerItem(),
                        new ToggleDrawerItem().withName("3").withIcon(FontAwesome.Icon.faw_home).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)
                ) // add the items we want to use with our Drawer
                .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                    @Override
                    public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
                        if (drawerItem instanceof Nameable) {
                            Toast.makeText(MainActivity.this, ((Nameable) drawerItem).getName().getText(MainActivity.this), Toast.LENGTH_SHORT).show();
                        }
                        return false;
                    }
                })
                .withGenerateMiniDrawer(true)
                .withSavedInstance(savedInstanceState)
                // build only the view of the Drawer (don't inflate it automatically in our layout which is done with .build())
                .buildView();


        miniResult = result.getMiniDrawer();
        View view = miniResult.build(this);

Solution

  • As of the normal usage there is always the "normal" drawer (via the DrawerLayout), and the MiniDrawer in your case you just want to use the MiniDrawer and add it to your View hierarchy.

    As you already figured out correctly the MiniDrawer is filled via the normal DrawerBuilder as this comes with all the methods to interact with the elements added to the drawer.

    As your use-case is special there is no "out-of-the-box" inflating of the MiniDrawer alone.

    So you have the View of the MiniDrawer above. You now just need to add it to your Activity .

    I recommend that your layout looks something like this:

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"/>
        <LinearLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/toolbar">
            <RelativeLayout 
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <!-- Place your content here -->
            </RelativeLayout>
        </LinearLayout>
    </RelativeLayout>
    

    So in your code you get the "container"

    LinearLayout container = (LinearLayout) findViewById(R.id.container);
    container.addView(view, 0); //view is the view of your MiniDrawer
    

    Just to improve your code and remove unnecessary stuff. You can remove

    .withToolbar(toolbar)
    .withTranslucentStatusBar(false) 
    

    as those are not necessary if you just use the MiniDrawer