Làm cách nào để thay đổi màu của dòng phân cách ListView của Android?


400

Tôi muốn thay đổi màu của ListViewdòng phân cách. Bất kỳ trợ giúp sẽ được đánh giá cao.

Câu trả lời:


765

Bạn có thể đặt giá trị này trong tệp xml bố cục bằng cách sử dụng android:divider="#FF0000". Nếu bạn đang thay đổi màu sắc / drawable, bạn cũng phải đặt / đặt lại chiều cao của dải phân cách.

<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>

11
Bạn cũng có thể chỉ định một Drawabletài nguyên android:dividerlà tốt. Dải phân cách hiện tại là một gradient.
CommonsWare

62
Nếu bạn làm điều đó bằng XML, hãy đảm bảo cũng nhìn thấy chiều cao bằng cách sử dụng android: spliterHeight nếu không bạn sẽ không nhận được dòng nào
Eric Novins

8
Theo kinh nghiệm của tôi, đọc "nên đặt lại chiều cao của dải phân cách" thành "phải đặt chiều cao của dải phân cách"
dpjanes

44
Tôi không khuyên bạn nên sử dụng pxđơn vị để xác định kích thước trong Android, dpthay vào đó hãy sử dụng
Marek Sebera

12
Có vẻ như có một lý do tốt để sử dụng px trong trường hợp cụ thể này. Xem: stackoverflow.com/a/12061612/10505
greg7gkb

163

Hoặc bạn có thể mã nó:

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

Hy vọng nó giúp


Hoàn hảo, các mục của tôi là trên nền màu đỏ nhạt và hiệu ứng của bạn làm cho chúng tuyệt vời !!
Darkendorf

1
nếu bạn mở rộng ListActivity, hãy thay thế danh sách của tôi bằng getListView ()
Aziz

87

Đối với một dòng màu sử dụng:

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

Điều quan trọng là DividerHeight được đặt sau dải phân cách , nếu không bạn sẽ không nhận được gì.


1
Cảm ơn bạn, tôi đã gọi setDividerHeight () trước khi setDivider () và không có bộ chia nào được hiển thị.
Andreas Klöber

3
Nhận xét rất hữu ích về thứ tự của các hoạt động. Tôi chỉ mất 2 giờ cố gắng để làm cho nó hoạt động. Thiết kế đẹp, Android.
Nick Frolov

12

Bạn cũng có thể lấy màu từ tài nguyên của mình bằng cách sử dụng:

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

10

Phiên bản XML cho hiệu ứng tuyệt vời @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>

Đặt tên cho hình dạng đó là: list_do.xml trong thư mục drawable

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

6

Có hai cách để làm như vậy:

  1. Bạn có thể đặt giá trị của android: spliter = "# FFCCFF" trong tệp xml bố cục. Với điều này, bạn cũng phải xác định chiều cao của dải phân cách như android này : spliterHeight = "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. Bạn cũng có thể làm điều này bằng cách lập trình ...

    ListView listView = getListView();
    ColorDrawable myColor = new ColorDrawable(
        this.getResources().getColor(R.color.myColor)
    );
    listView.setDivider(myColor);
    listView.setDividerHeight();
    

2

Sử dụng mã dưới đây trong tệp xml của bạn

<ListView 
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#000000" 
    android:dividerHeight="1dp">
</ListView> 

2
Tốt nhất là giải thích một chút về lý do tại sao giải pháp của bạn hoạt động. Mã chỉ có câu trả lời có thể khắc phục vấn đề nhưng điều đó không nhất thiết phải trả lời câu hỏi của người hỏi.
SuperBiasedMan

1

sử dụng có lập trình

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

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

sử dụng 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>

0

Sử dụng android:divider="#FF0000"android:dividerHeight="2px"cho ListView.

<ListView 
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#0099FF"
android:dividerHeight="2px"/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.