【问题标题】:Apply gradient to rows in listview in android将渐变应用于android中listview中的行
【发布时间】:2013-08-22 05:54:36
【问题描述】:

我有一个不同颜色的列表视图,具体取决于它是偶数行还是奇数行:

我的自定义适配器:

 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>

偶数行:

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

奇行:

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

我有点迷茫,因为我无法让偶数行和奇数行颜色与渐变效果一起使用。对于预压效果渐变,我有下一个代码:

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

感谢您的帮助!

【问题讨论】:

  • 您的选择器没有默认值(未启用、未按下、未聚焦)
  • 另外,如果该项是启用的,它会一直选择启用(因为它是第一个tiem)
  • 那么我应该添加什么?我是 XML 版本的新手,因为直到现在这不是我的工作

标签: android listview colors background gradient


【解决方案1】:

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

<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 以防它被按下并启用,因为按下状态的&lt;item&gt; 位于其他行之前。

【讨论】:

  • 我尝试移动所有可用状态的选择器,但出现 startColor 和 endColor 错误,请您解释一下如何正确操作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多