当前位置: 首页 > 知识库问答 >
问题:

为什么我不能用布局重力锁定抽屉布局

彭衡
2023-03-14

我使用DrawerLayout,最近我想改变抽屉布局中listView的重力。但是在我从android:layout_gravity="start"将listView的重力更改为android:layout_gravity="start|底"后,抽屉布局无法锁定

mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

setDrawerLockMode()工作;

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

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</RelativeLayout>

<ListView
    android:id="@+id/drawer_list"
    android:layout_width="320dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#F3F3F4"
    android:choiceMode="singleChoice" >
</ListView>

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

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</RelativeLayout>

<ListView
    android:id="@+id/drawer_list"
    android:layout_width="320dp"
    android:layout_height="match_parent"
    android:layout_gravity="start|bottom"
    android:background="#F3F3F4"
    android:choiceMode="singleChoice" >
</ListView>

`

有什么线索可以解释为什么我不能在其他引力中使用锁定模式吗?

谢谢

共有1个答案

包翔
2023-03-14

根据留档,可以使用的唯一可用的重力是重力。左重力。右GravityCompat。开始GravityCompat。结束

(我的重点):

抽屉的定位和布局是使用子视图上的android:layout\u gravity属性来控制的,该属性对应于您希望抽屉出现在视图的哪一侧:左侧或右侧。(或在支持布局方向的平台版本上开始/结束。)

查看源代码

public void setDrawerLockMode(int lockMode, int edgeGravity) {
  final int absGrav = GravityCompat.getAbsoluteGravity(edgeGravity,
                                                       ViewCompat.getLayoutDirection(this));
  if (absGrav == Gravity.LEFT) {
    mLockModeLeft = lockMode;
  } else if (absGrav == Gravity.RIGHT) {
    mLockModeRight = lockMode;
  }
  if (lockMode != LOCK_MODE_UNLOCKED) {
    // Cancel interaction in progress
    final ViewDragHelper helper = absGrav == Gravity.LEFT ? mLeftDragger : mRightDragger;
    helper.cancel();
  }
  switch (lockMode) {
    case LOCK_MODE_LOCKED_OPEN:
      final View toOpen = findDrawerWithGravity(absGrav);
      if (toOpen != null) {
        openDrawer(toOpen);
      }
      break;
    case LOCK_MODE_LOCKED_CLOSED:
      final View toClose = findDrawerWithGravity(absGrav);
      if (toClose != null) {
        closeDrawer(toClose);
      }
      break;
      // default: do nothing
  }
}

方法本身仅检查重力是左还是右(但使用重力比较法,因此应适当翻译开始和结束)。

这意味着通过将重力设置为“start | bottom”,您引入了无效重力,这会导致setDrawerLockMode()无所事事。

 类似资料:
  • 一个灵活的力导向图布局实现使用位置Verlet整合算法允许简单地控制。有关物理模拟的更多信息,请参见Thomas Jakobsen。这个实例是利用四叉树加速电荷相互作用使用Barnes–Hut approximation。除了电荷charge力,pseudo-gravity力保持节点中心在可见区域并且避免排出断开子图,当链接的固定距离的几何约束时。额外的自定义力和约束可应用于"tick" 事件,简

  • 我做了一个没有actionbar的双抽屉布局,如下所示: 使用不带TitleBar或ActionBar的导航抽屉 请救命!!

  • 如何禁用DrawerLayout的手势识别?(从左向右滑动)并仅接受关闭手势(从右向左)并仅使用home按钮打开抽屉?

  • 我是android新手,我将设计这种对我来说很复杂的布局。这是主_活动的代码。xml文件: 基本上,我的主要活动中有一个导航抽屉和3个选项卡。这是一张照片: 一切按我的意愿进行,我很高兴。 当我点击导航抽屉项目时,我开始了一个新的意图来打开一个新的活动,这很好,但抽屉当然会消失(因为新活动没有抽屉)。我想把抽屉一直放在屏幕上。 为了把抽屉放在屏幕上,我想我可以把上面XML的TabLayout作为一

  • 问题内容: 我已经阅读了一些文章,但没有得到实际的信息。有人可以向我解释。 仅与IE6相关吗? 这是什么? 是IE唯一的TAG吗? 编辑: 我发现此信息对我很有帮助 由于Internet Explorer很老(因为它是最早可用的浏览器之一),所以它没有像现在的浏览器那样重新启动。因此,随着时间的流逝,Microsoft开始改编新引擎以使用CSS。看起来不错……但是,CSS改变了Internet E

  • 我试着在画布里放一幅画。但就是没有出现。我谷歌了一下,看看哪里出了问题。不幸的是,我还是解决不了。这是我的代码 这是css文件