34

我用 ListView 创建了一个 android 应用程序。我在列表中添加了页眉和页脚。但是在添加分隔符/分隔符时,它还会在标题和第一个 ListView 项之间创建一个空白空间。它对最后一个 ListView 项和页脚执行相同的操作。

空白空间相当于所有ListView项之间的分隔线的大小,不同的是它不绘制分隔线,只是留下空白空间。我以为我找到了带有 xml 属性“已启用页脚分隔符”和“已启用页眉分隔符”的解决方案。但是当它们设置为 false 时,它​​不会改变任何东西。我什至尝试以编程方式设置它们

list.setFooterDividerEnabled(false);
list.setHeaderDividerEnabled(false);

但它只是行不通。有什么办法可以解决这个问题?我只是不希望有空白空间,我希望第一个项目完全适合页眉(页脚也是如此)。

4

6 回答 6

5

我偶然发现了同样的问题,但情况与您的情况略有不同。MyListView有一个标题(一个搜索框),但它下面的第一个项目包含一个部分标题(日期或字母)而不是常规列表项(实际内容以图像、一些文本和很快)。因此,我希望它不是可选的,所以在我的自定义适配器中,我已经覆盖areAllItemsEnabled了 return false

大错特错,因为这正是罪魁祸首。看,看起来,按照设计,ListView实现只在两个启用的项目之间绘制分隔线,但仍然为启用的项目和禁用的项目之间的分隔线保留空间,即使这些分隔线不会被绘制。当然,这是一个有意识的设计决定并不意味着它不愚蠢。最奇怪的是,此分隔线绘制策略仅基于返回的值,而不是基于对后续项目areAllItemsEnabled的单个调用返回的值。isEnabled

因此,为了解决这个问题,我只需要返回trueareAllItemsEnabled我保留了被覆盖的方法并添加了关于这个问题的评论,否则一个月后我将无法记住它):你瞧,空白消失了,被分频器代替。现在,如果我想将ListView标题和第一个部分标题显示为完全相邻,我只需要选择一个与部分标题颜色相同的分隔线颜色。

真的希望这与您的情况相同,或者我的解决方案以其他方式帮助您。

于 2013-07-10T10:07:12.360 回答
1

我尝试了幻影浪子的解决方案(基于android-pulltorefresh):

视图布局(header.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ProgressBar
            style="@android:style/Widget.ProgressBar.Small.Inverse"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_margin="16dp"
            android:layout_marginTop="2dp" />
    </RelativeLayout>
</LinearLayout>

充气视图:

m_headerView = inflater.inflate(R.layout.header, this, false);

显示视图:

m_headerView.setPadding(0, 0, 0, 0);
m_headerView.setVisibility(View.VISIBLE);

隐藏视图:

m_headerView.setPadding(0, -1000, 0, 0);
m_headerView.setVisibility(View.GONE);

它在我们的项目中完美运行。我希望它会有所帮助。

于 2013-01-25T07:04:47.843 回答
0

在 getview 方法中,您可以检查项目是第一个还是最后一个,并设置自定义分隔符,其高度为 0 或透明颜色的单个像素高度。

于 2013-07-15T09:16:35.903 回答
0

转到 android 布局中的 ListView 属性并搜索间距标签...在 android 中,当创建新布局时,它会默认创建间距标头间距和边框属性。检查它,如果它可用,则将其删除

于 2013-07-26T08:02:05.377 回答
0

没有找到很好的解决方案。

手动设置dividerHeight="0dp"和创建我自己的分隔线 - 如果您需要更精确的控制,可以直接在布局 XML 中或在适配器中动态设置。

于 2014-05-03T01:07:59.660 回答
-3

做就是了

list.setDividerHeight(0)

那应该照顾它。

于 2012-07-27T22:19:03.393 回答