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

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

в настоящее время у меня есть:

<com.example.practice.MyListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:layout_below="@id/name" />

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

6 ответов


тогда вы не сможете достичь того, чего хотите, так просто.

Шаг первый: установите разделитель как прозрачный и сделайте высоту немного больше:

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="8dp"/>

Шаг второй: для достижения эффекта "маленькая линия", вы можете добавить пользовательский drawable в качестве фона элемента представления списка, скажем, элемент представления списка определяется как " list_item.xml':

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
<-- Add a Custom background to the parent container of the listview items -->
android:background="@drawable/list_item_selector"
android:orientation="vertical" >
<-- Rest of the item layout -->
</LinearLayout>

конечно, этот пункт может быть все, что вам нравится, мой:

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

<item>
  <shape 
    android:shape="rectangle">
        <stroke android:width="1dp" android:color="@color/bg_gray" />
        <solid android:color="@android:color/white" />
    </shape>
</item>
<item android:bottom="1dp"> 
    <shape 
        android:shape="rectangle">
        <stroke android:width="1dp" android:color="#FFDDDDDD" />
        <solid android:color="#00000000" />
    </shape>
</item>
</layer-list>

но это отключило бы эффект "селектора Голо", где всякий раз, когда вы нажимаете или выделяете элемент в listview, над ним нарисован синий цвет Голо, поэтому, если вы заметили, что на фоне элемента списка мы не использовали список слоев, мы использовали селектор с именем "list_item_selector".

вот селектор, который использует список слоев drawable, когда не нажата, и использует Голо-синий цвет при нажатии:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
    android:state_pressed="false"
    android:drawable="@drawable/list_item_bg2"        
    />
 <item android:state_pressed="true"
    android:drawable="@color/holo_blue"
    />
</selector>

редактировать для комментариев

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

скажите, что это мой макет элемента списка:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/grid_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/grid_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/grid_image"
    android:minHeight="48dp"
    android:padding="8dp"
    android:textIsSelectable="false" />

</RelativeLayout>

все необходимое было бы,

Шаг первый: определите минимальную высоту или максимальную высоту, как вы предпочитаете, в затемнениях.XML-файл, содержащийся в значениях/ папка. Почему? Потому что высота должна определенно измениться в зависимости от макета, и вы можете определить различные затемнения.XML для каждой плотности устройства.

в Инте.xml, скажи:

<resources>

<!-- List Item Max and Min Height -->

    <dimen name="list_item_min_height">48dp</dimen>
    <dimen name="list_item_max_height">96dp</dimen>
    <dimen name="list_item_set_height">64dp</dimen>

</resources>

а затем используйте любое значение для родителя LinearLayout из вас список элементов макета.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/list_item_min_height" >

и это все для этой темы, теперь, чтобы центрировать текст, это еще проще:

  • если вы используете TextView и завернуты в RelativeLayout, используйте:android:layout_centerVertical="true"

  • если вы используете LinearLayout, используйте:android:layout_gravity="center_vertical"

и соедините это с:Примечание это работает только в том случае, если вы не установили высоту wrap_content, иначе это не имеет значения.

  android:gravity="center_vertical"

надеюсь, это поможет.


Я не знаю, правильно ли я понял ваш вопрос. Если вы хотите, чтобы разделитель был прозрачным, чтобы вы видели мир фона между каждым ListView Так что это дает своего рода 3D-эффект при прокрутке. Вы могли бы сделать это так:

в вашем list_item xml дайте LinearLayout цвет фона, который вы хотите, например:

<LinearLayout 
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="match_parent"    
android:padding="4dip"
android:orientation="horizontal"
android:background="#FFFFFF"
>

тогда отдай свой ListView цвет фона, как это:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentListView"
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dip"
android:background="#0000FF"
android:cacheColorHint="@android:color/transparent"
android:drawSelectorOnTop="true"
/>

теперь ваш ListView свитки над вашей фон

Я надеюсь, что это то, чего вы хотели.


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

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

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


это решение для тех из вас, кто не хотите, чтобы разделитель был видимым и все еще хотите добавить больше места. Чтобы полностью избавиться от делителя, установите его в @null и установите dividerHeight в 0dp. Вот общий список мин.

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:layout_alignLeft="@+id/txtMake"
    android:layout_below="@+id/txtMake"
    android:fadeScrollbars="false"
    android:scrollbarThumbVertical="@drawable/scroll_bar_color"
    android:scrollbarStyle="outsideInset" >
</ListView>

Далее перейдите к xml-файлу, в котором используется адаптер для заполнения listview. Перейдите в контейнер (пример RelativeLayout...) и просто добавьте следующее.

    android:layout_marginTop="15dp"

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


вы можете просто использовать разделитель

пример

  <ListView
    android:id="@+id/activity_main_listview_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="10dp"
    />

здесь, в android: divider вы можете установить цвет или сделать его прозрачным и в dividerHeight для добавления spce между элементами.


внутри ListView тег в XMLfile добавить dividerHeight тег и дать ему значение(расстояние между элементами списка).

это предоставит вам подходящее пространство между элементами списка.

код:

<ListView
    android:id="@+id/listid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:divider="@drawable/divi"
    android:dividerHeight="60dp"></ListView>

теперь создать XML-файл на холст (в данном случае имя ДиВи). Внутри него добавьте stroke tag и дайте ему ширину, и это будет сделано.

код:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#000000"
         />
</shape>