2012-11-04 53 views
7

Tôi đang cố lập trình màu nền tùy chỉnh trong Bộ điều hợp ListView nhưng tôi muốn giữ kiểu Listview Selector mặc định từ Android.Thay đổi màu nền của mặt hàng ListView nhưng vẫn giữ kiểu bộ chọn mặc định?

Tôi đang thiết lập màu nền bằng phương pháp "SetBacgroundResource" của chế độ xem mục của tôi.

Tôi đang sử dụng Android 4.0 và tôi đã thử ví dụ từ blog này http://daniel-codes.blogspot.co.nz/2010/07/how-to-change-listview-rows-background.html nhưng sử dụng ví dụ này bộ chọn hiển thị tuy nhiên màu nền không được chọn sẽ không hiển thị.

Làm cách nào để đạt được điều này trong Android 4.0 ICS?

EDIT: Đây là tài nguyên tôi đang sử dụng cho nền Danh sách có thể vẽ.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:state_selected="true" android:drawable="@android:color/transparent" /> 
    <item android:state_selected="true" android:drawable="@android:color/transparent" /> 
    <item android:state_pressed="true" android:state_selected="false" android:drawable="@android:color/transparent" /> 
    <item android:state_selected="false" android:drawable="@color/list_item_first" /> 
</selector> 

Mã mà tôi đang sử dụng để đặt nền này có thể vẽ được bên trong phương thức GetView của adatapter của tôi. Mã này là:

convertView.setBackgroundResrouce(R.drawable.list_item_dark); 
+0

Xin vui lòng gửi tài nguyên mà bạn đang sử dụng. – CommonsWare

+0

Tôi đã đăng tài nguyên cho câu hỏi của mình. – startupsmith

Trả lời

3

Hãy thử điều này một:

trong cách bố trí Row của bạn thiết lập các thuộc tính nền cho

android:background="@drawable/your_selector" 

listView của bạn thiết

android:listSelector="@drawable/your_selector" 
+0

Vấn đề với điều này là tôi đang quay nền drawables trong mã để nền drawable sẽ không giống nhau cho tất cả các hàng do đó thiết lập nó ở cấp listview sẽ không làm việc ... – startupsmith

+0

Hoạt động hoàn hảo cho tôi. Tôi có một ListView tùy chỉnh với nền của mặt hàng như màu trắng và trên báo chí tôi muốn thay đổi nó thành màu xanh. –

3

Hãy thử viết tùy chỉnh của bạn adapter và thiết lập rowView BackgroundColor như thế (nếu vị trí số lẻ BLACK, thậm chí RED). bạn cũng có thể gửi một danh sách màu sắc để tiếp hợp và thiết lập màu sắc khác nhau cho mỗi rowView

public View getView(int position, View convertView, ViewGroup parent) { 
      View rowView = convertView; 
     enter code here 

      if(rowView == null) 
      { 
       if((position % 2)==1){ 
       rowView.setBackgroundColor(Color.BLACK) 
        //colorList :setBackgroundColor(colorList.get(position)) 
       } 
       else{ 
        rowView.setBackgroundColor(Color.RED) 
       } 
      }   
      return rowView; 
     } 
+0

những mã này không thể thành công khi tôi đang áp dụng một số bố trí thổi phồng trong convertView .. vì vậy xin vui lòng đề nghị tôi làm thế nào để thành công các điều kiện .... !!! –

+0

bạn có thể chia sẻ mã của mình không? – KEYSAN

+0

ok tôi hiểu vấn đề của tôi ... !!! –

4

Bạn có cố gắng để thiết lập thuộc tính android:drawSelectorOnTop của ListView của bạn để có đúng không?
Bạn sẽ có thể đặt nền cho mục của bạn và để xem mục được tô sáng khi nhấn.

+0

Xin chào Tôi đã cố gắng điều này ... Nó hoạt động tuy nhiên nó không phải là chính xác hiệu quả mà tôi sau. Tôi không muốn đánh dấu được hiển thị trên tất cả văn bản và hình ảnh trong mục danh sách. – startupsmith

1

Cố gắng áp dụng phong cách này để ListView của bạn:

<style name="List"> 
    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">fill_parent</item> 
    <item name="android:background">#FFFFFF</item> 
    <item name="android:dividerHeight">1dp</item> 
    <item name="android:divider">#CCCCCC</item> 
    <item name="android:cacheColorHint">#FFFFFF</item> 
    <item name="android:listSelector">#00000000</item> 
</style> 

Và trong cách bố trí xml của bạn này:

<ListView 
    android:id="@+id/listView" 
    style="@style/List" 
    android:paddingTop="1dp"/> 
Các vấn đề liên quan