4

我注意到 Google 应用程序中的抽屉是可滚动的,但由于某种原因,我无法得出如何实现可滚动 DrawerLayout 的结论。我尝试使用以下设计范例构建布局文件。

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

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mainScreen">
    <!-- Layout of Activity -->
  </FrameLayout>

  <!-- DrawerLayout segment -->
  <ScrollView
     android:id="@+id/scrollView"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <LinearLayout
      android:id="@+id/drawerLinearLayout"
      android:orientation="vertical"
      android:layout_width="260dp"
      android:layout_height="match_parent"
      android:layout_gravity="start|bottom"
      android:layout_marginTop="?android:attr/actionBarSize"
      android:divider="@android:color/transparent"
      android:dividerHeight="0dp"
      android:background="#77000000">
     <!-- Layout of Drawer -->
     </LinearLayout>
   </ScrollView>
 </android.support.v4.widget.DrawerLayout>

但是,无论有没有 ScrollView,当项目超出屏幕末端时,抽屉只会在底部切断项目。我无法启用任何形式的滚动。不确定我缺少什么或需要启用什么。想法将不胜感激。

DrawerLayout 段中的 LinearLayout 包含不同样式的视图。一个视图只显示标题,其下方有一个分隔线,一个显示一个带有文本的图像视图,另一个显示一个标题,其中内置了一个开关。因此,如果在 XML 编码布局文件之外完成,则需要考虑多个样式视图。

4

3 回答 3

6

虽然使用 ListView 是一个有效的选项,但尝试并解决我已经在上面的 ScrollView 之间为我的布局构建了如此大的 XML 文件的情况对我很有用。事实证明,只需进行一些小的修改即可使其按预期工作。最新构建的布局文件如下:

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

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".mainScreen">
    <!-- Layout of Activity -->
  </FrameLayout>

  <!-- DrawerLayout segment -->
  <ScrollView
     android:id="@+id/scrollView"
     android:layout_width="260dp"
     android:layout_height="match_parent"
     android:layout_gravity="start|bottom"
     android:layout_marginTop="?android:attr/actionBarSize">
     <LinearLayout
      android:id="@+id/drawerLinearLayout"
      android:orientation="vertical"
      android:layout_width="260dp"
      android:layout_height="wrap_content"
      android:divider="@android:color/transparent"
      android:dividerHeight="0dp"
      android:background="#77000000">
     <!-- Layout of Drawer -->
     </LinearLayout>
   </ScrollView>
 </android.support.v4.widget.DrawerLayout>

主要的修改要求我改变重力和边距的存在位置。重力需要在周围的 ScrollView 中,否则它会导致奇怪的行为,在某些情况下显然不会滚动或实际崩溃。然后需要将内部布局更改为“包装内容”。

如果边距也没有移动到 ScrollView 中,它显然不会向下滚动到底部。它在底部留下了未滚动的滚动边距。一旦解决了这个问题,DrawerLayout 就可以按预期工作了。还提出了 ListView 选项是另一种使用方法,但正如在这一点上提到的,值得我进一步分析它以重用我已经编写的代码;尤其是需要在视图内部处理的几个不同的自定义视图。

于 2013-10-24T13:56:38.990 回答
2

它似乎只适用于 ListView。与尝试使 ScrollView 工作相比,迁移到 ListView 所需的时间更少。

于 2013-11-27T23:41:12.420 回答
1

您应该使用列表视图和框架布局。像这样的东西:

<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/frameLayout"
         android:layout_width="match_parent"
         android:layout_height="0dip"
         android:layout_weight="1"/>
    <ListView android:id="@+id/left_drawer"
        android:layout_width="180dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

您还可以参考 developer.android.com 上的 Navigation Drawer 文档。它拥有您需要的一切。

于 2013-10-23T20:11:50.797 回答