我正在努力解决这个问题,这显然是一个非常简单的效果,但令人难以置信的是没有找到任何在Android中这样做的实用方法。
我有一个ListView,我设法自定义背景图像,以便通过获取新的背景可绘制来突出显示所选项目。我创建了一个新样式,我将 android:listSelector 属性设置为指向 StateListDrawable ,其中我指定了哪些drawable用于每个州。
但是每个ListView项都是一个LinearLayout,其中我有两个TextView。我的目标是能够在选择或按下父项的同时,在背景可绘制的同时更改这些子视图的文本颜色。我知道有一个 ColorStateList 但是没有成功设置它。
有没有人成功获得这样的工作?
感谢。
答案 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)
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>