(Android)如何填充ListView背景并保留标题透明度

我有一个自定义图像背景,填充ListView后面的整个屏幕。

ListView有一个包含一些数据的标题,然后是一个透明的10dp边距(允许我们看到一点背景图像),然后是一些更多的数据。 在这个标题下面,在ListView的“主体”中,我需要将ListView的背景填充到屏幕的底部,即使其中的项目不是一直到底部。

如果我设置了ListView的背景,那么即使只有几个项目(或根本没有项目),我也会得到所需的效果,总是填充到屏幕的底部。 但这也掩盖了标题中的10dp透明分隔符,因此我无法再通过标题看到自定义背景。

有人可以指出我在正确的路径下获得屏幕填充同时保持标题内的透明分隔线?

有人提到我可能需要创建“假”项单元格,可用于创建ListView背景的错觉,而不会影响标题的透明分隔符。 但是,如果可能的话,我希望find一个更简单的解决方案..或者如果这最好的解决方案,看看有人能给我一些关于如何以最有效的方式实现这一目标的指示。

谢谢!

编辑:

这是我如何定义标题,虽然我认为这个问题与ListView有关,而不是我通过addHeaderView()添加到ListView的标题。

  ****       

所以,我已经尝试了各种方法来创建10dp填充,目前我正在使用“空”10dp LinearLayout,这样我就可以获得对它的引用,并在我想要时将其可见性设置为GONE(我不是这样做的)在我讨论的情况下)

我正在设置ListView的背景,如下所示:listView.setBackgroundResource(resource)。

再次,当我将背景设置为此ListView时,我得到所需的背景行为总是填满整个屏幕,即使我已添加到列表中的项目数量(顺便说一下,所有项目都使用与我相同的背景资源)设置为ListView)不足以填满屏幕。 但是当我这样做时,标题中的10dp“透明边距”是不可见的,因为在它后面,ListViews背景阻止了底层视图被看到。

我假设发生这种情况是因为ListView的背景也落后于页眉和页脚视图。

关键是,有很多方法可以在元素之间创建一个10dp的“透明边距”,以允许底层视图显示出来。 我的问题在于为ListView“body” (即不是页眉/页脚)创建一个总是填满屏幕的背景,即使列表部分填充或为空同时保留了标题中的透明度,以便我仍然可以看到ListView“后面”的视图。

您需要通过在ListView设置以下内容使ListView的项目透明:

 android:background="@android:color/transparent" android:cacheColorHint="@android:color/transparent" 

然后您的项目布局需要具有任何颜色/图像(这将放在透明度的顶部)。

这应该可行,但在Android上工作量很大,因为透明度确实会对Android产生影响,特别是当它在ListView中有很多UI更新时。

我通过添加彩色页脚来破解它。 页脚是一个LinearLayout,其中包含一个名为“fill”的视图,设置为5dp高度w /我想要的bg颜色。

在填充和缩放我的列表标题(先前代码)之后,我调整了页脚以填充剩余的屏幕空间:

  ... int totHeight = getTotalHeightofListView(); if((mHeader.getMeasuredHeight() + totHeight) < mList.getMeasuredHeight()) addFooterFill(mHeader.getMeasuredHeight() + totHeight); } protected int getTotalHeightofListView() { ListAdapter LvAdapter = mList.getAdapter(); int totHeight = 0; for (int i = 0; i < mAdapter.getCount(); i++) { View mView = mAdapter.getView(i, null, mList); mView.measure( MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); totHeight += mView.getMeasuredHeight(); } return totHeight; } protected void addFooterFill(int sizeUsed){ View fill = (View) mFooter.findViewById(R.id.fill); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) fill.getLayoutParams(); params.height = mList.getMeasuredHeight() - sizeUsed; fill.setLayoutParams(params); } 

理论上,即使你已经有一个页脚,这应该工作。 您基本上只是调整页脚内视图的高度。

如果有人还需要它,我已经find了解决方案。 我刚刚制作了drawable,其顶部颜色为标题背景,如下所示:

         

我知道现在可以使用NavigationView但我需要快速修复当前的应用程序。