从DrawerLayout格式从右到左滑动ExpandableListView

时间:2013-07-22 16:03:22

标签: android android-layout

如何从DrawerLayout表格从右到左滑动ExpandableListView

我想在屏幕的右下角显示ExpandableListView,我该怎么办?

<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>

3 个答案:

答案 0 :(得分:22)

android:layout_gravity="start"更改为android:layout_gravity="end"android:layout_gravity="right"(使用end将抽屉放在屏幕左侧以进行从右到左的配置)

修改

似乎ActionBarDrawerToggle正在寻找与操作栏主页图标(Gravity.START)位于同一侧的抽屉,这是左侧到右侧布局方向的左侧。如果你总是把抽屉放在右边,你可以这样做:

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;
    }
};

如果抽屉始终位于操作栏主页图标的对面,则可以改为使用Gravity.END

答案 1 :(得分:5)

我有同样的问题,因为我的应用程序是阿拉伯语,必须从右边开始。

在这里测试了所有解决方案后,我发现最好的是:

  • 在清单中添加此行:android:supportsRtl="true"
  • 在您的活动中添加以下代码:getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
  • 列表视图中的
  • 不要使用:android:layout_gravity="right" 因为如果你使用得当,你会在更多的Android版本中得到错误,比如4.0.4

解决方案是使用:android:layout_gravity="start",因为在这种情况下listview会跟随页面的重力。

答案 2 :(得分:1)

这是ActionBar中主页按钮单击中的一个错误,它显示在行中:

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

删除我提到的行,你有方法:

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

并将其替换为:

@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;
    }
    //...
}

另外,不要忘记将ListView的重力更改为右:android:layout_gravity="right"