8

如何在 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>
4

3 回答 3

23

更改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改用。

于 2013-07-22T16:04:17.093 回答
5

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

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

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

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

于 2015-01-26T19:41:22.390 回答
2

这是在 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"

于 2015-01-04T08:52:57.557 回答