Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

slide ExpandableListView at DrawerLayout form right to left

How to slide ExpandableListView at DrawerLayout form right to left

i want to show ExpandableListView at right corner of screen , how can i do that ??

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ExpandableListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/white"
        android:dividerHeight="0dp"
      />
</android.support.v4.widget.DrawerLayout>
like image 527
user1571714 Avatar asked Jul 22 '13 16:07

user1571714


3 Answers

Change android:layout_gravity="start" to either android:layout_gravity="end" or android:layout_gravity="right" (using end will put the drawer on the left side of the screen for right-to-left configurations)

EDIT

It appears that the ActionBarDrawerToggle is looking for a drawer on the same side as the action bar Home icon (Gravity.START), which would be the left side for left-to-right layout directions. If you will always have the drawer on the right, you could do something like this:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer, R.drawable.ic_drawer, R.string.open_drawer, R.string.close_drawer) {

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item != null && item.getItemId() == android.R.id.home) {
            if (mDrawer.isDrawerOpen(Gravity.RIGHT)) {
                mDrawer.closeDrawer(Gravity.RIGHT);
            } else {
                mDrawer.openDrawer(Gravity.RIGHT);
            }
        }
        return false;
    }
};

If the drawer will always be opposite the action bar Home icon, you could use Gravity.END instead.

like image 126
Karakuri Avatar answered Nov 14 '22 05:11

Karakuri


I have the same problem since my app is Arabic and must begin from the right.

After testing all solutions here, I found that the best is:

  • add this line in manifest : android:supportsRtl="true"
  • in your activity add this code : getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
  • in your listview don't use : android:layout_gravity="right" because if you use right you get the error in more Android versions like 4.0.4

The solution is the use of: android:layout_gravity="start", because in this case the listview follows the gravity of the page.

like image 33
yacine Avatar answered Nov 14 '22 04:11

yacine


It is a bug in the home button click in ActionBar that shows itself in line:

if (mDrawerToggle.onOptionsItemSelected(item)) {
    return true;
}

remove the lines I mentioned, where you have method:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
   if (mDrawerToggle.onOptionsItemSelected(item)) {
      return true;
   }
   //....
}

and replace it with:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    if (item != null && item.getItemId() == android.R.id.home) {
        if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
            mDrawerLayout.closeDrawer(Gravity.RIGHT);
        } else {
            mDrawerLayout.openDrawer(Gravity.RIGHT);
        }
        return true;
    }
    //...
}

Also do not forget to change the gravity of ListView to right: android:layout_gravity="right"

like image 2
Bobs Avatar answered Nov 14 '22 05:11

Bobs