Как добавить пространство между элементами в 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>