androidandroid-layoutnavigation-drawerdrawerlayout

How to implement a DrawerLayout with a visible handle


I have successfully implemented a NavigationDrawer for my application.

My app displays a drawer that opens on the left of the screen.

My problem is I need to add a button on the left. That button might be clicked or swiped to open the left drawer. That I can do.

But the button is supposed to look like it's a part of the drawer that would overflow into the screen.

That means the button should slide simultaneously as the drawer opens and closes.

CLOSED STATE :

enter image description here

OPENING STATE

enter image description here

I tried adding the button into the left drawer's layout, but it seems you can't make stuff appear outside of its boundaries, and the drawer will always get completely hidden when you close it.

Now I'm trying adding it to add a button to the main DrawerLayout and make it align to the right of the left drawer... But no luck... It looks like a DrawerLayout can't have more than two children...

Any help will be appreciated.

I'm using the Support library (v4)

[EDIT] And I am supporting API level 8... So can't use ImageView.setTranslationX or View.OnAttachStateChangeListener


Solution

  • I found a way of doing this pretty easily thanks to the Aniqroid library written by Mobistry (SO pseudo)

    I use the SlidingTray class which is a copy of android SlidingDrawer but lets you position the drawer to any corner of the screen.

    I declared the element via xml

    <com.sileria.android.view.SlidingTray 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer"
        android:layout_width="match_parent"
        android:layout_height="270dp"
        android:content="@+id/content"
        android:handle="@+id/handle" >
    
        <ImageView
            android:id="@+id/handle"
            android:layout_width="320dp"
            android:layout_height="24dp"
            android:background="@drawable/tray_btn" />
    
        <LinearLayout
            android:id="@+id/content"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="fill_vertical"
            android:orientation="vertical" >
        </LinearLayout>
    
    </com.sileria.android.view.SlidingTray>
    

    And just had to call

    Kit.init(this);
    

    in my main Activity before inflating the layout.

    I thank aniqroid devs!

    https://code.google.com/p/aniqroid/