(Android) Как заполнить фон ListView и сохранить прозрачность заголовка

У меня есть собственный фон изображения, который заполняет весь экран за ListView.

В ListView есть заголовок, который содержит некоторые данные, затем прозрачную маржу 10dp (позволяющую нам увидеть немного фонового изображения), а затем еще несколько данных. Ниже этого заголовка, в «теле» ListView, мне нужно сделать фоновое заполнение ListView до конца экрана, даже если элементы внутри не идут полностью вниз.

Если я задаю фон ListView, тогда я получаю желаемый эффект, который всегда заполняется в нижней части экрана, даже если есть только пара элементов (или вообще нет). Но это также покрывает прозрачный делитель 10dp в заголовке, так что я больше не могу видеть пользовательский фон «через» заголовок.

Может ли кто-нибудь указать мне правильный путь для получения как заполнения экрана при сохранении прозрачного разделителя внутри заголовка?

Кто-то упоминал попутно, что мне может понадобиться создать «поддельные» ячейки элементов, которые могут быть использованы для создания иллюзии фона ListView без влияния на прозрачный разделитель заголовка. Тем не менее, я надеюсь найти более легкое решение, если это возможно .. или если это лучшее решение, посмотрите, может ли кто-нибудь дать мне несколько указаний о том, как это сделать наиболее эффективным образом.

Спасибо!

РЕДАКТИРОВАТЬ:

Вот как я определяю заголовок, хотя я думаю, что этот вопрос имеет больше общего с ListView, чем этот заголовок, который я добавляю в ListView через addHeaderView ().

<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 (т. Е. Не верхнего колонтитула), который всегда заполняет экран, даже если список частично заполнен или пуст и в то же время сохраняет эту прозрачность в заголовке, чтобы я Все еще могут видеть представления, которые «отстают» от ListView.

    Вы должны сделать элементы в ListView прозрачными, установив следующие в ListView :

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

    Тогда у ваших элементов Layout должен быть любой цвет / изображение (это будет помещено поверх прозрачности).

    Это должно работать, но это будет тяжелая работа над Android, поскольку прозрачность действительно сказывается на Android, особенно когда она находится в ListView где много обновлений пользовательского интерфейса.

    Я взломал его, добавив цветной нижний колонтитул. Нижний колонтитул представлял собой LinearLayout, содержащий View, называемый «fill», установленный на 5dp height с моим желаемым цветом 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); } 

    Теоретически это должно работать, даже если у вас уже есть нижний колонтитул. Фактически вы просто корректируете высоту представления в нижнем колонтитуле.

    Я нашел решение для этого, если кому-то это еще нужно. Я просто сделал 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 но мне нужно быстро исправить текущее приложение.