自定义列表视图分隔线在最后一项上绘制两次

时间:2014-07-20 21:54:04

标签: android layout navigation-drawer

我有一个奇怪的问题。我的自定义列表视图的分隔线(实际上是在项目布局底部设置为高度1dp的线性布局)被绘制为最后一项(在标题之前或导航抽屉末尾)的两倍高度。

这就是它的外观

enter image description here

这是我的listview项目布局XML

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/listItem">

    <LinearLayout
        android:id="@+id/itemLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:orientation="vertical"

        android:layout_marginTop="0dp"
        android:background="@android:color/transparent"
        tools:ignore="UselessParent">

        <LinearLayout

            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:minHeight="55dp"
            android:background="@drawable/nav_drawer_bg"
            android:id="@+id/itemClickable"
            android:paddingLeft="10dp">

            <ImageView
                android:id="@+id/drawer_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical" />

            <TextView
                android:id="@+id/drawer_itemName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"

                android:textColor="#ffffff"
                android:layout_gravity="center_vertical"
                android:background="@android:color/transparent" />

        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:layout_gravity="bottom"
            android:background="@drawable/border_bottom_header"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"></LinearLayout>

    </LinearLayout>

</RelativeLayout>

这是我的listview标题XML文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/listItemHeader">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/itemHeader"
        android:background="@color/darkgray"
        tools:ignore="UselessParent"
        android:layout_marginTop="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/headerText"
            android:layout_gravity="center_vertical"
            android:textColor="#ffeaeaea"
            android:paddingLeft="5dp"
            android:paddingTop="2dp"
            android:paddingBottom="3dp" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:background="@drawable/border_bottom_header"></LinearLayout>

    </LinearLayout>

</RelativeLayout>

最后这是我的后台xml文件(用于分隔符布局)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:startColor="#474747"
        android:centerColor="#5a5a5a"
        android:endColor="#474747"
        />
    <corners
        android:radius="4dp"
        />
    <size
        android:height="3dp"/>
</shape>

任何人都可以帮我解决这个问题,我对此感到很困惑,不知道从哪里开始。我感谢任何帮助。

编辑:activity_main.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">

    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- android:layout_gravity="start" tells DrawerLayout to treat
         this as a sliding drawer on the left side for left-to-right
         languages and on the right side for right-to-left languages.
         The drawer is given a fixed width in dp and extends the full height of
         the container. A solid background is used for contrast
         with the content view. -->

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#ff1a1a1a"
        android:scrollingCache="true"
        android:scrollbars="none"/>
</android.support.v4.widget.DrawerLayout>

1 个答案:

答案 0 :(得分:0)

我发现了什么问题。我在每个listview项的顶部和底部添加了1dp边距,并将分隔符的大小减小到1dp。似乎1dp的分隔线与相邻的listview项重叠,因此最后的项看起来更大,因为最后一项也没有重叠它。因此,考虑到边距,布局文件中的一个小变化解决了这个问题。