listview标题和第一个项目之间的空白空间

时间:2012-04-12 07:18:14

标签: android header android-listview footer divider

我用ListView创建了一个Android应用程序。我已经在页面中添加了页眉和页脚。但是在添加分隔符/分隔符时,它还会在标题和第一个ListView项之间创建一个空格。它对最后一个ListView项和页脚也是如此。

空白空间等于所有ListView项之间的分隔符大小,不同之处在于它不会绘制分隔符并且只留下空白空间。我以为我找到了xml属性'Footer dividers enabled'和'Header dividers enabled'的解决方案。但是当它们设置为false时,它不会改变任何东西。我甚至尝试使用

以编程方式设置它们
list.setFooterDividerEnabled(false);
list.setHeaderDividerEnabled(false);

但它不起作用。有什么方法可以解决这个问题?我只是不希望空白空间存在,我希望第一项完全适合标题(页脚相同)。

6 个答案:

答案 0 :(得分:5)

我偶然发现了同样的问题,但情况与你的情况略有不同。我的ListView有一个标题(搜索框),但它下面的第一项包含一个标题标题(日期或字母)而不是常规列表项(实际内容采用图像形式) ,一些文字,等等)。因此,我希望它不可选,所以在我的自定义适配器中,我已覆盖areAllItemsEnabled以返回false

大错,因为那正是罪魁祸首。看来,按照设计,ListView实现only draw dividers between two enabled items似乎仍然为已启用项目和已禁用项目之间的分隔线保留空间,即使这些分隔线不会被绘制。事实上,这是一个有意识的设计决定并不意味着它不是愚蠢的。最奇怪的是,此分隔符绘制策略仅基于areAllItemsEnabled返回的值,而不是后续项目对isEnabled的单个调用返回的值。

因此,为了解决这个问题,我只需要从true返回areAllItemsEnabled(我保留了被覆盖的方法并添加了关于此问题的评论,否则我将无法记住它从现在起一个月):瞧,白色空间消失了,取而代之的是分隔线。现在,如果我想显示ListView标题并且第一个标题标题完全相邻,我只需要选择与标题颜色相同的分隔颜色。

真的希望和你的情况一样,或者我的解决方案会以其他方式帮助你。

答案 1 :(得分:1)

我尝试了幻影浪子的solution(基于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);

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

转到android布局中的ListView属性并搜索间距标签...一些如何在android中创建新布局时,默认创建的是间距标题间距和边框属性。检查它,如果可用,然后将其删除

答案 4 :(得分:0)

没有找到一个好的解决方案。

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

答案 5 :(得分:-3)

只做

list.setDividerHeight(0)

应该照顾它。