Как изменить цвет разделительной линии Android ListView?

Я хочу изменить цвет разделительной линии ListView. Любая помощь будет оценена по достоинству.


person UMAR-MOBITSOLUTIONS    schedule 03.03.2010    source источник


Ответы (9)


Вы можете установить это значение в XML-файле макета, используя android:divider="#FF0000". Если вы меняете цвет / возможность рисования, вам также необходимо установить / сбросить высоту разделителя.

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

  <ListView 
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:divider="#FFCC00"
    android:dividerHeight="4px"/>

</LinearLayout>
person JeremyFromEarth    schedule 03.03.2010
comment
Вы также должны иметь возможность указать ресурс Drawable в android:divider. Существующий разделитель - это градиент. - person CommonsWare; 03.03.2010
comment
где существующий градиентный разделитель? - person ninjasense; 22.10.2010
comment
Если вы сделаете это в XML, убедитесь, что вы также видите высоту, используя android: dividerHeight, иначе вы не получите строку - person Eric Novins; 29.06.2011
comment
По моему опыту, чтение должно сбросить высоту разделителя, чтобы установить высоту разделителя. - person dpjanes; 01.12.2011
comment
Я бы не рекомендовал использовать px unit для определения размеров в Android, вместо этого используйте dp - person Marek Sebera; 22.01.2012
comment
Я использовал для обработки цвета разделительной линии, устанавливая фон ListView. Мой метод не работает, когда размер списка меньше размера экрана. Заливает экран некрасивыми цветами. Но это здорово. - person Ashok Goli; 09.06.2012
comment
Похоже, что в этом конкретном случае может быть веская причина использовать px. См .: stackoverflow.com/a/12061612/10505 - person greg7gkb; 25.04.2013
comment
Да, потому что там было 1px. - person Phantômaxx; 18.04.2014
comment
Разделитель - исключение. Он должен быть 1 пиксель, а цвет должен быть достаточно контрастным. Потому что 1dp может варьироваться в пределах 1-2 пикселей или даже больше на дисплеях с очень высокой плотностью. Внешний вид немного некрасивый ИМО. - person WindRider; 24.11.2014
comment
Поскольку я использую устройство с плотностью более 500 точек на дюйм для тестирования, я бы рекомендовал 1dp, так как 1px почти не виден. - person Eloar; 09.01.2015
comment
Если линия 1dp выглядит толстой, используйте 0.5dp, но не 1px - person Apurva; 20.01.2015
comment
Можно ли это применить и к ExpandableListView? - person natsumiyu; 18.07.2019

Или вы можете закодировать это:

int[] colors = {0, 0xFFFF0000, 0}; // red for the example
myList.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
myList.setDividerHeight(1);

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

person Asher Aslan    schedule 10.10.2010
comment
Отлично, мои предметы были на красноватом градиентном фоне, и ваш эффект сделал их великолепными !! - person Darkendorf; 21.12.2012
comment
если вы расширяете ListActivity, замените mylist на getListView () - person Aziz; 24.04.2014

Для одноцветной линии используйте:

list.setDivider(new ColorDrawable(0x99F10529));   //0xAARRGGBB
list.setDividerHeight(1);

Важно, чтобы DividerHeight был установлен после разделителя, иначе вы ничего не получите.

person htafoya    schedule 28.06.2012
comment
Спасибо, я вызвал setDividerHeight () перед setDivider (), и разделитель не был показан. - person Andreas Klöber; 24.08.2012
comment
Очень полезный комментарий о порядке действий. Я просто потратил 2 часа, пытаясь заставить его работать. Приятный дизайн, Android. - person Nick Frolov; 10.07.2014

Вы также можете получить цвета из своих ресурсов, используя:

dateView.setDivider(new ColorDrawable(_context.getResources().getColor(R.color.textlight)));
dateView.setDividerHeight(1);
person BitBlt    schedule 08.02.2013

Версия XML для классного эффекта @Asher Aslan.

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

    <gradient
        android:angle="180"
        android:startColor="#00000000"
        android:centerColor="#FFFF0000"
        android:endColor="#00000000"/>

</shape>

Назовите эту форму как: list_driver.xml в папке с возможностью переноса.

<ListView
        android:id="@+id/category_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:divider="@drawable/list_driver"
        android:dividerHeight="5sp" />
person Peter Nguyen    schedule 17.02.2014

Есть два способа сделать то же самое:

  1. Вы можете установить значение android: divider = "# FFCCFF" в XML-файле макета. При этом вам также необходимо указать высоту разделителя, например, android: dividerHeight = "5px".

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
      <ListView 
      android:id="@+id/lvMyList"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:divider="#FFCCFF"
      android:dividerHeight="5px"/>
    
    </LinearLayout>
    
  2. Вы также можете сделать это программно ...

    ListView listView = getListView();
    ColorDrawable myColor = new ColorDrawable(
        this.getResources().getColor(R.color.myColor)
    );
    listView.setDivider(myColor);
    listView.setDividerHeight();
    
person Aj 27    schedule 02.02.2015

Используйте приведенный ниже код в своем XML-файле

<ListView 
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#000000" 
    android:dividerHeight="1dp">
</ListView> 
person Mahesh Suthar    schedule 15.05.2015
comment
Лучше немного объяснить, почему ваше решение работает. Ответы только на код могут решить проблему, но это не обязательно ответ на вопрос спрашивающего. - person SuperBiasedMan; 15.05.2015

используя программно

           // Set ListView divider color
            lv.setDivider(new ColorDrawable(Color.parseColor("#FF4A4D93")));

            // set ListView divider height
            lv.setDividerHeight(2);

используя xml

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

  <ListView 
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:divider="#44CC00"
    android:dividerHeight="4px"/>

</LinearLayout>
person Chanaka Weerasinghe    schedule 02.07.2019

Используйте android:divider="#FF0000" и android:dividerHeight="2px" для ListView.

<ListView 
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#0099FF"
android:dividerHeight="2px"/>
person Vettiyanakan    schedule 17.02.2014