2

i've a list view with different colors depending on if it's an even or odd row:

My custom adapter:

 if ( position % 2 == 0)
        convertView.setBackgroundResource(R.layout.listview_selector_even);
      else
          convertView.setBackgroundResource(R.layout.listview_selector_odd);

list_selector_even:

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >        
      <item android:drawable="@layout/even_row" android:state_enabled="true"/>
      <item android:drawable="@layout/even_row" android:state_pressed="true"/>
      <item android:drawable="@layout/even_row" android:state_focused="true"/>
</selector>

list_selector_odd:

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android" > 
      <item android:drawable="@layout/odd_row" android:state_enabled="true"/>
      <item android:drawable="@layout/odd_row" android:state_pressed="true"/>
      <item android:drawable="@layout/odd_row" android:state_focused="true"/>
  </selector>

even_row:

<?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="#FFFFFF"/>  
   <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />       
</shape>

odd_row:

<?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#F0F0F0"/>
<padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />
</shape>

I'm a little bit lost because i cant get the even and odd rows colors working with the gradient effect. For the preessed effect gradient i've the next code:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" >
    <shape>
      <gradient
        android:startColor="#3E5260"
        android:endColor="#3E5260"
        android:angle="270" />
    </shape>
 </item>
</selector>

Thanks for the help!

4

1 回答 1

2

您已经检查了选择器中的状态,因此对于渐变,您应该这样做:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
  <gradient
    android:startColor="#3E5260"
    android:endColor="#3E5260"
    android:angle="270" />
</shape>

此外,或者将选择器更改为以下并为每个选择器项定义一个文件,或者将具有所有可用状态的选择器移动到odd_row.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
  <item android:drawable="@layout/odd_row_pressed" android:state_pressed="true"/>
  <item android:drawable="@layout/odd_row_focused" android:state_focused="true"/>
  <item android:drawable="@layout/odd_row_enabled"/>
</selector>

此版本确保在未按下项目且未聚焦时选择odd_row_enabled.xml。如果在未启用该项目的情况下需要另一种布局,则必须再添加一行(在默认行之前)。此外,它确保选择odd_row_pressed.xml 以防它被按下并启用,因为<item>按下状态的 位于其他行之前。

于 2013-08-20T08:52:41.523 回答