我正在使用客户ArrayAdapter的列表视图。我已重写getView以更新TableLayout中的文本视图。更新文本后,将梯度应用于一组表行,以在任何给定时间动态突出显示相关信息。不幸的是,这种突出显示并不总是如我所料。预期的外观如下:
然而,在启动时立即然后如果我点击列表项,外观会发生变化:
并且在应用于每个表行的渐变之间存在可见空间。我的理论是,修改文本时行高会发生变化,但是在重绘之前会计算渐变大小。然后,当使用相同的文本重绘行时,它们显示正确(因为行高度没有改变)。
我正在寻找解决此问题的任何建议,最好是设置使表格按照我想要的方式运行,或者在应用渐变之前重新计算行的大小的API调用。或者,一种更好的技术可以产生更可靠的行为。
在应用渐变之前,我已经尝试使整个表和各行无效。这没有效果。
绘制渐变的代码如下:
TableRow travelInfoRow = (TableRow) v.findViewById(R.id.travelInfo);
TableRow arrivalInfoRow = (TableRow) v.findViewById(R.id.arrivalInfo);
TableRow destinationInfoRow = (TableRow) v.findViewById(R.id.destinationInfo);
TableRow departureInfoRow = (TableRow) v.findViewById(R.id.departureInfo);
GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[] { 0xff0b4496, 0xff000000 });
if (item.enRoute()) {
travelInfoRow.setBackgroundDrawable(gd);
} else {
travelInfoRow.setBackgroundColor(Color.BLACK);
}
if (item.atLocation()) {
arrivalInfoRow.setBackgroundDrawable(gd);
destinationInfoRow.setBackgroundDrawable(gd);
departureInfoRow.setBackgroundDrawable(gd);
} else {
arrivalInfoRow.setBackgroundColor(Color.BLACK);
destinationInfoRow.setBackgroundColor(Color.BLACK);
departureInfoRow.setBackgroundColor(Color.BLACK);
}