Интервал между элементами ListView Android

Я попытался использовать marginBottom в спискеView для создания пробела между элементом ListView, но все же элементы привязаны вместе.

Возможно ли это? Если да, существует ли конкретный способ сделать это?

Мой код ниже

<LinearLayout
android:id="@+id/alarm_occurences"
android:layout_width="fill_parent" 
android:orientation="vertical"
android:layout_height="fill_parent"
android:background="#EEEEFF"
xmlns:android="http://schemas.android.com/apk/res/android">

<ListView
android:id="@+id/occurences"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

Мой пользовательский элемент списка:

<com.android.alarm.listItems.AlarmListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" 
android:background="@drawable/alarm_item_background"
android:layout_marginBottom="10dp"    
>
<CheckedTextView     
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:textSize="20sp"
    android:textStyle="bold"
    android:typeface="serif"
    android:padding="10dp"

/>

</com.android.alarm.listItems.AlarmListItem>

Как сделать промежуток между элементами списка в этом случае?

Ответ 1

@Asahi в значительной степени попал в гвоздь на голове, но я просто хотел добавить немного XML для тех, кто, возможно, плавает здесь позже через google:

<ListView android:id="@+id/MyListView"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:divider="@android:color/transparent"
  android:dividerHeight="10.0sp"/>

По какой-то причине значения, такие как "10", "10.0" и "10sp", отклоняются Android для значения dividerHeight. Он хочет иметь число с плавающей запятой и единицу, например "10.0sp". Как отмечает @Goofyahead, вы также можете использовать независимые от экрана пиксели для этого значения (например, "10dp" ).

Ответ 2

Возможно divider или dividerHeight свойство ListView может решить вашу проблему.

Ответ 3

Хотя решение Nik Reiman DOES работает, я нашел, что это не оптимальное решение для того, что я хотел сделать. Использование разделителя для установки полей имело проблему с тем, что разделитель больше не будет виден, поэтому вы не сможете использовать его, чтобы показать четкую границу между вашими предметами. Кроме того, он не добавляет больше "кликабельной области" к каждому элементу, поэтому, если вы хотите сделать ваши элементы кликабельными, а ваши предметы тонкие, для кого-либо будет очень сложно щелкнуть элемент, поскольку высота, добавленная разделителем, не будет часть элемента.

К счастью, я нашел лучшее решение, которое позволяет обе показывать разделители и позволяет настраивать высоту каждого элемента, используя не поля, а заполнение. Вот пример:

ListView

<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

ListItem

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"
    android:paddingTop="10dp" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Item"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

Ответ 4

Вы должны обернуть ваш элемент ListView (например, your_listview_item) в другом макете, например LinearLayout, и добавить маркер в your_listview_item:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <your_listview_item
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
    ...
    ...
    />
</LinearLayout>

Таким образом вы также можете добавить место, если необходимо, справа и слева от элемента ListView.

Ответ 5

Мое решение добавить больше места, но сохранить горизонтальную линию, было добавить divider.xml в папку res/drawable и определить форму строки внутри:

divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line" >

    <stroke
        android:width="1px"
        android:color="@color/nice_blue" />

</shape>

то в моем списке я ссылаюсь на свой делитель следующим образом:

<ListView
    android:id="@+id/listViewScheduledReminders"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_marginBottom="@dimen/mediumMargin"
    android:layout_weight="1"
    android:divider="@drawable/divider"
    android:dividerHeight="16.0dp"
    android:padding="@dimen/smallMargin" >

</ListView>

обратите внимание на android:dividerHeight="16.0dp", увеличивая и уменьшая эту высоту. Я в основном добавляю больше отступов сверху и снизу линии делителя.

Я использовал эту страницу для справки: http://developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element

Ответ 6

Если вы хотите показать разделитель с полями и без растягивания - используйте InsetDrawable (размер должен быть в формате, о котором сказал @Nik Reiman):

ListView

<ListView
    android:id="@+id/listView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="#00000000"
    android:divider="@drawable/separator_line"
    android:dividerHeight="10.0px"/>

@вытяжке/separator_line:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="5.0px"
    android:insetRight="5.0px"
    android:insetTop="8.0px"
    android:insetBottom="8.0px">

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <gradient
            android:startColor="@color/colorStart"
            android:centerColor="@color/colorCenter"
            android:endColor="@color/colorEnd"
            android:type="linear"
            android:angle="0">
        </gradient>
    </shape>
</inset>

Ответ 7

Вы можете использовать:

android:divider="@null"
android:dividerHeight="3dp"

Пример:

<ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView" android:layout_gravity="center_horizontal"
        android:dividerHeight="3dp"
        android:divider="@null" android:clickable="false"/>

Ответ 8

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

У меня был списокView, где каждая запись в listView была определена его собственным макетом, аналогично тому, что Сэмми опубликовал в своем вопросе. Я пробовал предлагаемый подход по изменению высоты разделителя, но это не выглядело слишком красивым даже с невидимым разделителем. После некоторых экспериментов я просто добавил android:paddingBottom="5dip" к последнему элементу макета TextView в XML файле, который определяет отдельные записи listView.

В итоге это дало мне то, чего я пытался достичь с помощью android:layout_marginBottom. Я нашел это решение для получения более эстетически приятного результата, чем попытка увеличить высоту разделителя.

Ответ 9

Вместо того, чтобы давать поле, вы должны указать отступ:

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:divider="@android:color/green"
    android:dividerHeight="4dp"
    android:layout_alignParentTop="true"
    android:padding="5dp" >

</ListView>

ИЛИ

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:paddingTop="2dp"
    android:divider="@android:color/green"
    android:dividerHeight="4dp"
    android:paddingLeft="1dp"
    android:paddingRight="1dp"
    android:paddingBottom="2dp"
    android:paddingStart="0dp"
    android:paddingEnd="0dp" >

</ListView>

Ответ 10

Для моего приложения я сделал так

 <ListView
    android:id="@+id/staff_jobassigned_listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@null"
    android:dividerHeight="10dp">

</ListView>

просто set the divider to null и предоставление высоты делителю сделали для меня.

Пример:

android:divider="@null"

или

android:divider="@android:color/transparent"

и это результат

enter image description here

Ответ 11

Простейшее решение с существующим кодом OP (элементы списка уже получили дополнение) заключается в следующем:

listView.setDivider(new ColorDrawable(Color.TRANSPARENT));  //hide the divider
listView.setClipToPadding(false);   // list items won't clip, so padding stays

Этот ответ помог мне.

Примечание. Вы можете столкнуться с ошибкой в ​​переработке элементов списка слишком рано на старых платформах, как было предложено здесь.

Ответ 12

<ListView
    android:clipToPadding="false"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:dividerHeight="10dp"
    android:divider="@null"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>

и установите paddingTop, paddingBottom и dividerHeight в одно и то же значение, чтобы получить равное расстояние между всеми элементами и пространством в верхней и нижней частях списка.

Я установил clipToPadding в false, чтобы представления отображались в этой дополненной области.

Я установил divider в @null, чтобы удалить строки между элементами списка.

Ответ 13

Также еще один способ увеличить расстояние между элементами списка - это добавить пустой код в код адаптера, указав атрибут layout_height с требуемым интервалом. Напр. чтобы увеличить интервал между элементами вашего списка, добавьте этот фиктивный вид (пустой вид) в конец ваших элементов списка.

<View
    android:layout_width="match_parent"
    android:layout_height="15dp"/>

Таким образом, это обеспечит нижнее расстояние в 15 dp между элементами списка. Вы можете напрямую добавить это, если родительский макет LinearLayout и ориентация вертикальны или предпримите соответствующие шаги для другого макета. Надеюсь, это поможет: -)

Ответ 14

вам просто нужно сделать фон прозрачным для разделителя списка и сделать высоту в соответствии с вашим необходимым разрывом.

<ListView 
         android:id="@+id/custom_list"
         android:layout_height="match_parent"
         android:layout_width="match_parent"
         android:divider="#00ffffff"
         android:dividerHeight="20dp"/>

Ответ 15

Чтобы задать интервал между представлениями в спискеView, используйте прописку в ваших записях.

Вы можете использовать android:paddingBottom="(number)dp" && android:paddingTop="(number)dp" в вашем представлении или просмотрах, которые вы надуваете внутри своего списка.

Решение разделителя - это просто исправление, потому что когда-нибудь, когда вы захотите использовать цвет делителя (прямо сейчас он прозрачный), вы увидите, что разделительная линия растянута.

Ответ 16

Я нашел не очень хорошее решение для этого, если вы используете HorizontalListView, так как делители не работают с ним, но я думаю, что он будет работать в любом случае для более распространенного ListView.

Просто добавьте:

<View
android:layout_marginBottom="xx dp/sp"/>

в самом нижнем представлении макета, который вы надуваете в классе адаптера, создаст расстояние между элементами

Ответ 17

Многие из этих решений работают. Однако, если все, что вам нужно, - это установить разницу между элементами, самый простой метод, который я придумал, - это обернуть ваш элемент - в вашем случае CheckedTextView - в LinearLayout и поместить в него форматирование полей для элемента, а не корневой макет. Обязательно дайте этой оболочке макет id и создайте ее вместе с вашим CheckedTextView в своем адаптере.

Что это. Фактически вы создаете экземпляр поля на уровне элемента для ListView. Поскольку ListView не знает о каком-либо макете элемента - только ваш адаптер делает. Это в основном завышает часть макета элемента, которая ранее игнорировалась.

Ответ 18

Это поможет вам добавить высоту разделителя.

 getListView().setDividerHeight(10)

Если вы хотите добавить пользовательский вид, вы можете добавить небольшой вид в макет элемента listView.