我有一个自定义图像背景,可以填充ListView后面的整个屏幕。
ListView有一个包含一些数据的标题,然后是一个透明的10dp边距(允许我们看到一点背景图像),然后是一些更多的数据。在这个标题下面,在ListView的“主体”中,我需要让ListView的背景一直填充到屏幕的底部,即使其中的项目不是一直到底部。
如果我设置了ListView的背景,那么即使只有几个项目(或根本没有项目),我也会得到所需的效果,始终填充到屏幕的底部。但这也掩盖了标题中的10dp透明分隔符,因此我无法再通过标题看到自定义背景。
有人可以指出我正确的道路,让两个填充屏幕,同时保持标题内的透明分隔线?
有人提到我可能需要创建“假”项单元格,这些单元格可用于创建ListView背景的错觉,而不会影响标题的透明分隔符。但是,我希望在可能的情况下找到一个更简单的解决方案..或者如果是最好的解决方案,看看有人能给我一些关于如何以最有效的方式实现这一目标的指示。
谢谢!
修改
以下是我定义标题的方法,虽然我认为这个问题与ListView有关,而不是我通过addHeaderView()添加到ListView的标题。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:orientation="vertical">
<include android:id="@+view_list_header/headertop"
layout="@layout/view_list_item"/>
**<LinearLayout android:id="@+view_list_header/ll_transparent_filler"
android:layout_width="fill_parent" android:layout_height="10dp"/>**
<RelativeLayout android:id="@+view_list_header/sort" android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView.../> <ImageView.../> <TextView.../>
</RelativeLayout>
</RelativeLayout>
所以,我尝试了各种创建10dp填充的方法,目前我正在使用“空”10dp LinearLayout,以便我可以获取对它的引用,并在我想要时将其可见性设置为GONE(我我正在讨论的情况不是这样做的)
我正在设置ListView的背景,如下所示:listView.setBackgroundResource(resource)。
同样,当我将背景设置为此ListView时,即使我添加到列表中的项目数量(顺便说一下,所有使用相同的背景资源),我都会得到所需的背景行为,始终填满整个屏幕我设置为ListView)不足以填满屏幕。但是当我这样做时,标题中的10dp“透明边距”是不可见的,因为在它后面,ListViews背景阻止了底层视图被看到。
我假设发生这种情况是因为ListView的背景也落后于页眉和页脚视图。
关键是,有很多方法可以在元素之间创建10dp“透明边距”,以允许底层视图显示。我的问题在于为 ListView“body”(即不是页眉/页脚)创建一个总是填满屏幕的背景,即使列表部分填充或空和同时在标题中保留透明度,这样我仍然可以看到ListView“后面”的视图。
答案 0 :(得分:0)
您需要通过在ListView
上设置以下内容,使ListView
中的项目透明:
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
然后您的项目布局需要具有任何颜色/图像(这将放在透明度的顶部)。
这应该可行,但在Android上工作量很大,因为透明度确实会对Android产生影响,特别是当它处于ListView
时,会有很多UI更新。
答案 1 :(得分:0)
我通过添加彩色页脚来攻击它。页脚是一个LinearLayout,其中包含一个名为“fill”的视图,设置为5dp高度w /我想要的bg颜色。
填充后&amp;缩放我的列表标题(先前代码),然后调整页脚以填充剩余的屏幕空间:
...
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);
}
理论上,即使你已经有一个页脚,这也应该有效。您实际上只是调整页脚中视图的高度。
答案 2 :(得分:0)
如果有人还需要,我已经找到了解决方法。我刚刚制作了drawable,它的顶部颜色为标题背景,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="-45dp" android:left="-45dp" android:bottom="-45dp">
<shape>
<solid android:color="@color/gray_back" />
<stroke android:width="40dp" android:color="@color/colorPrimaryDark" />
</shape>
</item>
我知道现在可以使用NavigationView
,但我需要快速修复当前应用。