如何更改所选/重点ListView项目中的字体颜色?

时间:2010-10-12 17:15:30

标签: android listview layout

我正在努力解决这个问题,这显然是一个非常简单的效果,但令人难以置信的是没有找到任何在Android中这样做的实用方法。

我有一个ListView,我设法自定义背景图像,以便通过获取新的背景可绘制来突出显示所选项目。我创建了一个新样式,我将 android:listSelector 属性设置为指向 StateListDrawable ,其中我指定了哪些drawable用于每个州。

但是每个ListView项都是一个LinearLayout,其中我有两个TextView。我的目标是能够在选择或按下父项的同时,在背景可绘制的同时更改这些子视图的文本颜色。我知道有一个 ColorStateList 但是没有成功设置它。

有没有人成功获得这样的工作?

感谢。

5 个答案:

答案 0 :(得分:68)

当ListView被包含多个视图的布局受到损害时,这些都不是可能的答案。您需要将子视图设置为:

android:duplicateParentState="true"

现在,您可以使用其他人已经描述的方法,使用选择器声明TextViews的颜色,例如:

android:textColor="@drawable/my_row_selector"

我确定你知道,但选择器可以简单:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/white" />
    <item android:color="@color/black" />
</selector>

如您所见,允许使用@color值。希望这会有所帮助。

另外 - android:state_pressed与AdapterView.OnItemClickListener一起使用。

答案 1 :(得分:23)

你的textview propeties中的

android:textColor="@color/text_selector"
res / color中的

text_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="YOUR_CUSTOM_COLOR" />
    <item android:state_selected="true" android:color="YOUR_CUSTOM_COLOR" />
    <item android:color="YOUR_CUSTOM_COLOR" />
</selector>

答案 2 :(得分:11)

为了使其适用于选择,请使用以下代码:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

显然关键是state_activated="true"州。

答案 3 :(得分:2)

当您部署Android 11+应用程序(HoneyComb +)时,您应该使用

android:state_activated="true"

选择列表状态。 对于早期版本,请使用以下组合:

android:state_checked="true"
android:state_activated="true"

当然不要忘记包含

android:duplicateParentState="true"

因此视图可以从父列表视图项

获取激活/检查状态

答案 4 :(得分:1)

您也可以创建一个public Graph() { Random r = new Random(); int range = r.nextInt(maxT) + 3; // number of nodes for(int i = 0; i<range; i++){ List<Transmission> trans = new ArrayList<Transmission>(); tasks.put(new Task(i), trans); } System.out.println("Number of tasks: " + tasks.size()); List<Task> keys = new ArrayList<Task>(tasks.keySet()); for(int i = 0; i < keys.size() - 1; i++) { Task task1 = keys.get(i); List<Transmission> task1Transmissions = tasks.get(task1); task1Transmissions.add(new Transmission(task1, keys.get(i + 1))); for(int j = i + 2; j < keys.size(); j++) { if(r.nextInt(100) < chance) task1Transmissions.add(new Transmission(task1, keys.get(j))); } } } 文件夹并添加一个文件“text_selector.xml”,其中包含以下行:

res/color

在TextView中分配之后:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:color="#f0f"/>
    <item android:state_pressed="true" android:color="#f0f"/>
    <item android:color="#000"/>
</selector>