我有一个 ListView 和一个为列表项设置交替背景颜色的适配器(“斑马”列表样式):
public View getView(final int position, View convertView, ViewGroup parent) {
int colorPos = position % colors.length;
...
convertView.setBackgroundColor(colors[colorPos]);
return convertView;
}
但是现在,当我使用滚轮选择一个项目时,或者当我单击一个项目时,用于选择/单击的原始颜色不会覆盖我的自定义背景(我可以在我设置的颜色下方看到原始颜色)。
如何为这些状态设置原始颜色?
最佳答案
我认为最简单的方法是创建两个用作背景资源的选择器,在 state_selected 模式下使用透明颜色: (res/drawable/alterselector1.xml:)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/transparent" />
<item android:state_pressed="true"
android:drawable="@drawable/transparent" />
<item android:state_selected="false"
android:drawable="@drawable/altercolor1"/>
</selector>
(res/drawable/alterselector2.xml:)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/transparent" />
<item android:state_pressed="true"
android:drawable="@drawable/transparent" />
<item android:state_selected="false"
android:drawable="@drawable/altercolor2"/>
</selector>
(res/values/colors.xml:)
<resources>
<drawable name="transparent">#00ffffff</drawable>
<drawable name="altercolor1">#ffffffff</drawable>
<drawable name="altercolor2">#ff000000</drawable>
</resources>
然后使用 setBackgroundResource 方法在适配器的 getView 方法中设置背景:
if (position % 2 == 0){
reusableView.setBackgroundResource(R.drawable.alterselector1);
} else {
reusableView.setBackgroundResource(R.drawable.alterselector2);
}
现在当您选择一行时,您的背景不会隐藏原来的选择器。
关于android - 列出具有交替颜色的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050533/