更改 ListView 项目背景颜色但保留默认选择器样式?

Posted

技术标签:

【中文标题】更改 ListView 项目背景颜色但保留默认选择器样式?【英文标题】:Change ListView Item background color but keep the default selector style? 【发布时间】:2012-10-24 09:46:56 【问题描述】:

我正在尝试以编程方式在我的 ListView 适配器中设置自定义背景颜色,但我想保留 android 的默认 Listview 选择器样式。

我正在使用我的项目视图的“SetBacgroundResource”方法设置背景颜色。

我使用的是 Android 4.0,我尝试了此博客 http://daniel-codes.blogspot.co.nz/2010/07/how-to-change-listview-rows-background.html 中的示例,但使用此示例,选择器显示,但未显示未选择的背景颜色。

如何在 Android 4.0 ICS 中实现这一点?

编辑:这是我用于列表项背景可绘制的资源。

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

我用来设置此背景可绘制对象的代码位于我的适配器的 GetView 方法中。代码是:

convertView.setBackgroundResrouce(R.drawable.list_item_dark);

【问题讨论】:

请发布您正在使用的资源。 我已将资源发布到我的问题中。 【参考方案1】:

您是否尝试将ListView 的属性android:drawSelectorOnTop 设置为 true ? 您将能够为您的项目设置背景,并在按下时看到突出显示的项目。

【讨论】:

嗨,是的,我已经尝试过这个......它确实有效,但它并不完全是我所追求的效果。我不希望高亮显示在列表项中的所有文本和图像上。【参考方案2】:

尝试编写您的自定义适配器并像这样设置 rowView BackgroundColor(如果位置奇数黑色,偶数红色)。 您还可以向适配器发送颜色列表并为每个 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;
        

【讨论】:

当我在 convertView 中应用一些布局膨胀时,这些代码无法成功.. 所以请建议我如何成功实现这些条件....!!!【参考方案3】:

试试这个:

在你的行布局中设置背景属性

android:background="@drawable/your_selector"

和你的listView 设置

android:listSelector="@drawable/your_selector"

【讨论】:

这个问题是我在代码中旋转背景可绘制对象,因此所有行的背景可绘制对象都不相同,因此将其设置在列表视图级别将不起作用... 非常适合我。我有一个自定义 ListView,项目的背景为白色,按下时我想将其更改为蓝色。【参考方案4】:

尝试将此样式应用于您的 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>

在你的 xml 布局中:

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

【讨论】:

以上是关于更改 ListView 项目背景颜色但保留默认选择器样式?的主要内容,如果未能解决你的问题,请参考以下文章

更改 ListView 上所选项目的背景颜色

Flutter Using ListView.Builder:如何在我选择的所有项目上仅更改一项的背景颜色

ListView:如何从列表中访问视图以更改背景颜色?

Flutter:更改 ListView.builder 中选定按钮的背景颜色

listview 项目背景颜色更改

如何在颤动/飞镖的 ListView 项目中更改背景颜色