Android DrawerLayout 覆盖背景 ListView

Android DrawerLayout overlays background ListView

使用 ListView 和 Navigation Drawer 获得 activity,不幸的是,它覆盖了我的 ListView,我不能像 'onItemSelected' 那样与它进行任何交互。

That's how it looks like:

但是

每当我将 DrawerLayout 更改为不覆盖整个 activity 而只是 一小块,.

onitemSelect is working

下面是我的布局代码:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="marcin.chruscicki.notefication.MainActivity"
        android:background="@color/universalBackground_DarkGray">

        ...

     <ListView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/notesListView"
        android:stackFromBottom="false"
        android:layout_alignParentStart="true"
        android:layout_above="@+id/versionTxtView" />


     <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"
        android:fitsSystemWindows="true"
        >
        <!-- The main content view -->
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <!-- The navigation drawer -->
        <ListView android:id="@+id/left_drawer"
            android:layout_width="140dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#262626" />

    </android.support.v4.widget.DrawerLayout>

        ...

    </RelativeLayout>

我无法在任何地方找到答案,我相信这只是一个简单的问题。

你的列表视图不工作的原因是因为你把它放在底层,你在它上面放了一个抽屉所以抽屉在列表视图上面并且抽屉设置为 match_parent

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="marcin.chruscicki.notefication.MainActivity"
    android:background="@color/universalBackground_DarkGray">

    ...

 <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"
    android:fitsSystemWindows="true"
    >
    <!-- The main content view -->
   <android.support.design.widget.NavigationView
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:id="@+id/nav"/> 

</android.support.v4.widget.DrawerLayout>

    ...


<ListView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/notesListView"
    android:stackFromBottom="false"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/versionTxtView" />

</RelativeLayout>

尝试像这样放置列表视图当你在布局中制作一个项目时,它会一个接一个地放在另一个上面,这意味着你最后放置的项目将在前面 您需要在片段布局中制作导航抽屉 listviw。这是一个完整的示例fragment example。希望这将有助于you.Try 使导航抽屉的片段变得简单。

我想我刚刚找到了一个 solution/workaround 来解决我的问题。我没有将抽屉布局放在 TextView 或 ListView 等其他组件之间,而是使用了由 @neelay-srivastava 链接的 tutorial 并创建了新的 class + 布局,内部只有一个 DrawerLayout。然后将我所有的活动更改为碎片。它有效。

For futher users with same problem just remember to do not nest DrawerLayout in another activity layout between other components.