Подтвердить что ты не робот

Пустое пространство между заголовком listview и первым элементом

Я создал приложение Android с ListView. Я добавил в список верхний и нижний колонтитулы. Но при добавлении разделителя/разделителя он также создает пустое пространство между заголовком и первым элементом ListView. Он делает то же самое для последнего элемента ListView и нижнего колонтитула.

Пустое пространство эквивалентно размеру разделителя между всеми элементами ListView, с той разницей, что он не рисует разделитель и просто оставляет пустое пространство. Я думал, что нашел решение с атрибутами xml "Разделители нижнего колонтитула включенными" и "Разделителями заголовков включен". Но при установке их в false это ничего не меняет. Я даже попытался установить их программно с помощью

list.setFooterDividerEnabled(false);
list.setHeaderDividerEnabled(false);

Но это просто не работает. Любой способ исправить эту проблему? Я просто не хочу, чтобы пустое пространство было там, я хочу, чтобы первый элемент точно соответствовал заголовку (тот же для нижнего колонтитула).

4b9b3361

Ответ 1

Я наткнулся на ту же проблему, но в несколько иной ситуации, чем ваша. Мой ListView имеет заголовок (поле поиска), но первый элемент ниже содержит заголовок раздела (дату или букву), а не обычный элемент списка (с фактическим содержимым в форме изображения, некоторые текст и т.д.). Поэтому я хочу, чтобы он не был выбран, поэтому в моем пользовательском адаптере я переопределил areAllItemsEnabled, чтобы вернуть false.

Большая ошибка, потому что это точно преступник. Похоже, что по дизайну реализация ListView выводит только разделители между двумя включенными элементами, но все же резервирует пространство для разделителей между включенными и отключен, даже если эти разделители не будут нарисованы. Тот факт, что это сознательное дизайнерское решение, не означает, что это не глупо, конечно. Самое странное, что эта политика рисования разделителей основана на значении, возвращаемом areAllItemsEnabled вместо значений, возвращаемых одиночными вызовами на isEnabled для последующих элементов.

Таким образом, чтобы обойти это, мне просто нужно было вернуть true из areAllItemsEnabled (я сохранил переопределенный метод и добавил комментарий об этой проблеме, иначе я не смог бы запомнить его через месяц): И вот, пустое место исчезло, заменено разделителем. Теперь, если я хочу показать заголовок ListView и заголовок первого раздела как абсолютно смежные, мне просто нужно выбрать цвет разделителя, такой же, как цвет заголовка раздела.

Надеюсь, что тот же случай, что и ваш, или что мое решение поможет вам каким-то другим способом.

Ответ 2

Я попробовал этого парня решение и он работает (код основан на pulltorefresh):

расположение xml (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);

он отлично работает в нашем проекте. Надеюсь, это полезно.

Ответ 3

В методе getview вы можете проверить, является ли элемент первым или последним, и установить пользовательский devider, который будет иметь высоту или высоту одного пикселя с прозрачным цветом.

Ответ 4

перейти к свойствам ListView в макете android и найти тег интервала... некоторые из них в андроиде, при создании новых макетов, по умолчанию создается интервал между интервалами между заголовками и свойствами границы. проверьте его, если он доступен, удалите его

Ответ 5

Не нашел отличного решения.

Установите dividerHeight="0dp" и создайте мои собственные разделители вручную - либо непосредственно в макете XML, либо динамически в адаптере, если вам нужен более точный контроль.

Ответ 6

Просто сделай

list.setDividerHeight(0)

Это должно позаботиться об этом.