Android:不希望ListView使用完整的Drawer

Android: Dont want the ListView to use the complete Drawer

我正在编写我的第一个小应用程序。在这个应用程序中,我使用了两个抽屉,一个在右边,一个在左边:

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:id="@+id/relLayout"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:background="#D1933C"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <com.schnapsidee.app.CustomWebView
        android:id="@+id/Text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/space1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/space3"
        android:scrollbars="vertical"
        android:text="@string/fail"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/black" />

    <android.support.v7.widget.Space
        android:id="@+id/space1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="62dp" />


    <android.support.v7.widget.Space
        android:id="@+id/space2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <android.support.v7.widget.Space
        android:id="@+id/space3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="55dp" />

    <TextView
        android:id="@+id/seitenZahl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:textColor="@color/black"
        android:textSize="22sp" />

</RelativeLayout>

<ListView
    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/transparent"
    android:dividerHeight="0dp"
    android:background="#111"
    android:width="0dp"/>


<ListView
    android:id="@+id/right_drawer"
    android:layout_width="240dp"
    android:layout_height="800dp"
    android:layout_gravity="end"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="@drawable/pergament"
    android:scrollbars="vertical"
    android:drawSelectorOnTop="false"
   />

我像这样使用它们:

mDrawerItemLeft = getResources().getStringArray(R.array.sidebar_array_left);
    mDrawerItemRight = getResources().getStringArray(R.array.sidebar_array_right);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerListLeft = (ListView) findViewById(R.id.left_drawer);
    mDrawerListRight = (ListView) findViewById(R.id.right_drawer);
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);
    mDrawerListLeft.setAdapter(new Adapter(this, R.layout.drawer_list_item_left,
            mDrawerItemLeft));
    mDrawerListRight.setAdapter(new Adapter(this, R.layout.drawer_list_item_right,
            mDrawerItemRight));
    mDrawerListLeft.setOnItemClickListener(new LeftDrawerItemClickListener());

    mDrawerListRight.setOnItemClickListener(new RightDrawerItemClickListener());

我的问题是,我不希望右抽屉使用完整的屏幕高度。我只是想让它使用它的一部分,就像这张图片中的红色部分: http://i.stack.imgur.com/IdXAf.jpg

知道我该怎么做吗?

提前致谢!

为两个视图提供宽度 0dp 并在两个视图中添加 android:layout_weight="1"观看次数。

与其使用 ListView,不如使用布局,例如线性、相对,然后将 ListView 放置在该布局内。如果将布局作为 xml 中的最后一个元素放置,则整个布局将成为导航抽屉的布局。然后,您可以根据需要以任何方式将 Listview 放置在布局中。

<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">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="#111"/>
    <!-- The navigation drawer -->
    <RelativeLayout
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start">

        <!-- Position this list view inside the relative layout the way you  want -->
        <ListView android:id="@+id/left_drawer"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"/>
    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>

在导航抽屉中使用

android:layout_height="0dp"
android:layout_weight="1"

使用这个,你应该知道的事情......导航抽屉占据其内容的高度。所以它采用 listView,s height .. 给你的 listview 高度(根据你的要求)然后给 listView 背景“透明如下所示

 android:layout_height="as you want"
 android:background="@color/tranparent"

让它在你的 header 下然后采用线性布局并在你 header 之后编写导航抽屉代码.. 如果你是相对布局然后在你的导航中使用 android:layout_below="your header id"抽屉.

导航抽屉无需专门为 ListView,您可以使用任何 View/ViewGroup 为此目的,只需设置 gravity="end" 使其成为正确的导航抽屉。

  <ListView
        android:id="@+id/right_drawer"
        android:layout_width="240dp"
        android:layout_height="800dp"
        android:layout_gravity="end"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="@drawable/pergament"
        android:scrollbars="vertical"
        android:drawSelectorOnTop="false" />

将上面的代码改为:

<RelativeLayout
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="end">

    <ListView
        android:id="@+id/right_drawer"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:choiceMode="singleChoice"
        android:layout_centerVertical="true" />
</RelativeLayout>

根据需要设置ListView的其他属性,并将高度更改为小于800dp的值,因为800dp是相当长的高度,在很多设备上肯定会大于实际屏幕高度。