【问题标题】:ListView doesnt show onclick color after set background设置背景后ListView不显示onclick颜色
【发布时间】:2013-02-02 14:54:54
【问题描述】:

我有一个带有适配器的列表视图,它工作正常,但后来我添加了一些代码,因为我希望行是不同的颜色,之后,onclick 颜色不显示。

这是我添加的代码:

if (position % 2 == 0)
            vi.findViewById(R.id.parentL).setBackgroundColor(ctx.getResources().getColor(R.color.row1));
        else
            vi.findViewById(R.id.parentL).setBackgroundColor(ctx.getResources().getColor(R.color.row2));

【问题讨论】:

  • 你需要为你的项目背景创建一个选择器,它可以对状态变化做出反应(onSelect等)
  • 你能给我更多的细节吗?谢谢。
  • 我认为这就是您正在寻找的 stackoverflow.com/questions/2038040/… 描述
  • @QAMAR,该链接无济于事,因为 Edgar 需要不同的选择器来交替列表视图项。
  • @Nickolaus,这是很好的第一步。除了设置列表视图项选择器之外,您还需要将列表视图选择器设置为透明。

标签: android listview colors onclick


【解决方案1】:

TL:DR

  • 对列表视图项使用选择器
  • 您需要将整个列表视图背景设置为透明。

说明

首先,您需要将 ListView 设置为透明

在适配器的 onCreate() 方法中,设置:

 ((ListView) findViewById(R.id.main_list)).setBackgroundColor(0);

接下来,在AdaptergetView() 中包含以下代码

if (position%2 == 0) {
    view.setBackgroundResource(R.drawable.selector);
} else {
    view.setBackgroundResource(R.drawable.selector2);
}

selector.xml 在哪里

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

和 selector2.xml 是

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

别忘了包含一个colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
   <color name="blue">#00f</color>
   <color name="green">#0f0</color>
</resources>

示例项目

这里是sample project I configured for you 的文件。您可能想先做一个项目 > 清理。

在这个应用程序中可以忽略一些文件,因为我修改了一个现有的样本,它做了一些非常不同的事情。

截图

这是我的示例应用的样子

【讨论】:

  • 顺便说一句,这一行:“((ListView)findViewById(R.id.main_list)).setSelector(R.drawable.transparent);”在活动的 onCreate 方法中,而不是适配器的 getview,就像它说的那样,我错了吗?
  • 对不起。那是一个复制和粘贴错误。解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
相关资源
最近更新 更多