2012-11-04 16 views
7

Próbuję programowo ustawić niestandardowy kolor tła w moim adapterze ListView, ale chcę zachować domyślny styl Selektor listy z Androida.Zmienić Kolor tła listy elementów, ale zachować domyślny styl selekcji?

Ustawiam kolor tła za pomocą metody "SetBacgroundResource" w moim widoku elementu.

Używam Androida 4.0 i próbowałem przykładu z tego bloga http://daniel-codes.blogspot.co.nz/2010/07/how-to-change-listview-rows-background.html, ale używając tego przykładu selektor pokazuje jednak, że niewybrany kolor tła nie jest wyświetlany.

Jak mogę to osiągnąć w systemie Android 4.0 ICS?

EDYCJA: Oto zasób, którego używam do rysowania tła listy elementów.

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

Kod, którego używam do ustawienia tego tła, znajduje się w metodzie GetView mojego adataptera. Kod jest:

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

proszę umieszczać zasób, którego używasz. – CommonsWare

+0

Opublikowałem zasób na moje pytanie. – startupsmith

Odpowiedz

3

Spróbuj tego:

w układzie Row ustawić właściwości tła dla

android:background="@drawable/your_selector" 

a listView ustawić

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

Problem polega na tym, że obracam rysunki tła w kodzie, więc losowanie tła nie będzie takie samo dla wszystkich wierszy, dlatego ustawienie go na poziomie listy nie będzie działać ... – startupsmith

+0

Działa idealnie dla mnie. Mam niestandardowy ListView z tłem elementu jako białym, aw druku chciałem zmienić go na niebieski. –

3

Spróbuj napisać swój zwyczaj adapter i ustaw rowView BackgroundColor w ten sposób (jeśli pozycja nieparzysta liczba CZARNY, nawet CZERWONY). również można wysłać listę kolorów do adaptera i ustawić inny kolor dla każdego 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

kod ten nie może odnieść sukcesu, gdy stosuję jakiś układ zawyżania w convertView .. więc proszę zasugeruj mi, jak osiągnąć ten warunek .... !!! –

+0

czy mógłbyś udostępnić swój kod? – KEYSAN

+0

ok, rozumiem mój problem ... !!! –

4

Czy spróbować ustawić właściwość android:drawSelectorOnTop swojego ListView true?
Będzie można ustawić tło dla przedmiotu i zobaczyć podświetlony element po naciśnięciu.

+0

Cześć Tak, już wypróbowałem to ... Działa, ale nie jest to efekt, którego szukam. Nie chcę, aby wyróżnienie było wyświetlane nad całym tekstem i obrazami w elemencie listy. – startupsmith

1

Spróbuj zastosować ten styl do ListView:

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

A w układzie tym xml:

<ListView 
    android:id="@+id/listView" 
    style="@style/List" 
    android:paddingTop="1dp"/> 
Powiązane problemy