ListView nền trở nên đen khi cuộn


427

Tôi đã tạo một Danh sách cụ thể tồn tại trong số các yếu tố sau để tạo danh sách có thể cuộn với mỗi hàng có chứa Hình ảnh ở bên trái và một số văn bản ở bên phải:

Để bắt đầu với bố cục "root":

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#C8C8C8"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:drawSelectorOnTop="false"
        android:divider="#C8C8C8"
        android:background="#C8C8C8"/>
</LinearLayout>

và sau đó trong ListView tôi đặt mục "hàng" sau:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/bg_row"
>
    <ImageView
        android:layout_width="wrap_content"
        android:paddingLeft="10px"
        android:paddingRight="15px"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:layout_height="wrap_content"
        android:src="@drawable/bg_image"
    />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:textSize="16sp"
        android:textColor="#000000"
        android:layout_gravity="center"
        android:maxHeight="50px"/>
</LinearLayout>

Miễn là màn hình được hiển thị tĩnh (như không có chuyển động), nó sẽ được hiển thị chính xác, nhưng khi tôi bắt đầu cuộn qua danh sách nền của mục hàng (một "biểu tượng" như có thể được hiển thị trong mã) sẽ hiển thị chính xác nhưng nền của bố cục "gốc" sẽ trở nên hoàn toàn đen ... khi cuộn dừng, phần lớn thời gian sẽ lấy lại màu của nó ... Khi tôi kiểm tra tôi cũng đã thêm một TextViewphần tử gốc đó với cùng một nền tảng, cái này sẽ giữ màu của nó khi cuộn Danh sách ... Có ai biết tại sao điều này lại xảy ra không, và làm thế nào để giải quyết vấn đề này?

Câu trả lời:


771

Thêm một thuộc tính trên ListViewThẻ

android:cacheColorHint="#00000000" // setting transparent color

Để biết thêm chi tiết kiểm tra blog này


23
this .getListView (). setCacheColorHint (0); Từ cách bố trí tôi không thể đặt màu. Nhưng tôi đã quản lý để làm điều đó với mã trên. Tôi đã sử dụng mã này trong 'onCreate' của hoạt động danh sách. Hy vọng thông tin này cũng giúp.
Dijo David

70
android:cacheColorHint="#0000"cũng hoạt động nếu bạn sợ số không.
Andrew

136
Hoặc cũng có thể android:cacheColorHint="@android:color/transparent"nếu bạn sợ số :)
đấu tay đôi

2
@android: màu sắc / trong suốt có thể có thêm phần thưởng khi có một bộ bit đơn. Có một lỗi trong đó nếu bạn vượt qua 0 trên một số điện thoại thì độ trong suốt sẽ không hoạt động. Vì vậy, mẹo là đặt 1 bit.
Thomas Dignan

63

Rất đơn giản chỉ cần sử dụng dòng này trong tệp bố cục của bạn:

android:scrollingCache="false"

như thế này:

<ListView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>

2
Nó hoạt động nhưng tôi không nghĩ rằng nó là thông minh để làm: stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard

1
Tôi đã gặp trường hợp android: cacheColorHint = "# 00000000" không hoạt động, nhưng android: scrollingCache = "false" đã làm. Cảm ơn.
Yar

27

bạn có thể sử dụng như thế này:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);

10

android:id="@android:id/list"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:divider="#C8C8C8"
android:background="#C8C8C8"
android:cacheColorHint="#00000000"/>

7

Chúng tôi có nhiều tùy chọn cho vấn đề này, bạn có thể đặt nền trong suốt thông qua lập trình như

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

hoặc thông qua xml

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

5

Trong xml của bạn, nơi sử dụng Listviewthiết lập

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

5

Tôi đang sử dụng hình ảnh trong listViewvà đôi khi nó chuyển sang màu đen trong samsung s4 thậm chí không cuộn. Đó là một sai lầm ngu ngốc mà tôi đã làm trong bộ điều hợp. Tôi chỉ đưa quan điểm của mình thành null để khắc phục vấn đề này

 @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder;
            convertView = null; // convert view should be null
            if (convertView == null) {
                holder = new Holder();
                convertView = inflater1.inflate(R.layout.listview_draftreport_item, null);
             } 
        }

4

Có rất nhiều câu trả lời cho câu hỏi này nhưng hôm nay tôi nhận ra câu hỏi này vẫn còn thiếu một thông tin quan trọng.

hai giải pháp khả thi cho vấn đề, cả hai đều hoạt động nhưng mỗi giải pháp nên được sử dụng trong các tình huống khác nhau.


Phương pháp

Sử dụng android:cacheColorHintkhi bạn ListViewcó một nền màu vững chắc .

<item name="android:cacheColorHint">@android:color/transparent</item>

Sử dụng android:scrollingCachekhi bạn ListViewcó một hình ảnh (phức tạp) làm nền.

<item name="android:scrollingCache">false</item>

Ghi chú

Khi bạn ListViewcó một nền màu vững chắc, cả hai phương pháp sẽ hoạt động, vì vậy không chỉ có phương thức cacheColorHinthoạt động. Nhưng không nên sử dụng scrolingCachephương thức cho nền màu đặc vì nó tắt một phương thức tối ưu hóa được sử dụng để hoạt hình mượt mà và cuộn ListView.

Lưu ý cho ghi chú: scrolingCache đặt thành false không nhất thiết có nghĩa ListViewlà hoạt ảnh và cuộn sẽ trở nên chậm.




1

android:cacheColorHint="#00000000"// setting transparent color

hoặc là

không đặt nền tảng của listview.

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.