Это довольно хороший вопрос о расположении элементов в ListView в Android.
У меня есть активность с заголовком вверху и ListView, занимающим остальную часть экрана. Я хочу, чтобы мой ListView отображался с отступом 10dp слева, справа и сверху, но когда вы прокручиваете ListView вверх, я хочу, чтобы он покрывал верхний отступ 10dp, прежде чем исчезнуть под выцветшим краем. Точно так же, когда вы прокручиваете до конца, последний элемент списка должен отображаться с 10dp между нижней частью последнего элемента списка и фактической нижней частью экрана (если вам интересно, почему, это потому, что мне нужно красивое фоновое изображение) ковыряться вокруг ListView).
Я попытался добавить заполнение к самому ListView, но затем, когда вы прокручиваете список, он исчезает под краем заполнения.
Я из сети веб-разработчиков, и аналогия была бы в том, чтобы добавить поле выше первого элемента списка (и ниже последнего элемента списка).
источник
getListView(). addHeaderView(capView)
иgetListView(). addHeaderView(botView)
убедитесь, что он вызывается , прежде чем инициализировать содержимое списка, например. setListAdapter (адаптер);Ответы:
Вы написали:
Установить
ListView's
clipToPadding
атрибут вfalse
. Это включит заполнение вокругListView
и прокрутку до конца макета (а не только до края отступа).Пример:
android:clipToPadding
является атрибутом XMLViewGroup
базового класса для контейнеров макетов и представлений.Связанный вызов метода :
источник
<item name="android:clipToPadding">false</item>
clipToPadding
через стиль не работает для меня, это как если бы он не применялся. Хотя, если я установлю это непосредственно на ListView, это работает.android:scrollbarStyle="outsideOverlay"
что полоса прокрутки проходит и через отступыПриведенный выше ListView будет иметь отступ верхнего и нижнего колонтитула 20 пикселей.
источник
float mDensity = getResources().getDisplayMetrics().density; int height = (int) (50 * mDensity + 0.5f); padding.setHeight(height);
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
Приложение к ответу @ Якобуда ...
Мой listView уже использовал
android:divider/android:dividerHeight
свойства для создания прозрачных промежутков между элементами listView. Это позволило мне просто добавитьandroid:headerDividersEnabled
иandroid:footerDividersEnabled
свойства и установить точку заголовка и нижнего колонтитулаnew View(Activity.this)
.Небольшое упрощение для случаев, когда у вас уже есть настройка делителей в listView.
источник
Мое решение, использующее a
ListFragment
, основано на решениях @Jakobud и @ greg7gkb.источник
Ответ @Gunnar Karlsson хорош, но есть проблема преждевременной переработки видов ячеек, когда они полностью находятся за отступом, но еще не полностью за кадром. За это отвечает параметр clipToPadding = false, который может быть исправлен или не исправлен в будущей версии Android. ( При использовании clipToPadding в ListView элементы преждевременно перерабатываются )
У меня есть хорошее простое решение без побочных эффектов:
android:dividerHeight="-10dip"
, противоположное тому, что находится вокруг ячейкиПо сравнению с другим ответом нет необходимости устанавливать цвет делителя. Будет присутствовать заполнение в самой верхней и самой нижней ячейках, а отрицательный делитель предотвратит двойные делители высоты между ними.
источник