在Android TableLayout中跨行应用无缝渐变

时间:2014-08-19 01:51:53

标签: android android-layout gradient android-drawable

我正在使用客户ArrayAdapter的列表视图。我已重写getView以更新TableLayout中的文本视图。更新文本后,将梯度应用于一组表行,以在任何给定时间动态突出显示相关信息。不幸的是,这种突出显示并不总是如我所料。预期的外观如下:

correct appearance

然而,在启动时立即然后如果我点击列表项,外观会发生变化:

incorrect appearance

并且在应用于每个表行的渐变之间存在可见空间。我的理论是,修改文本时行高会发生变化,但是在重绘之前会计算渐变大小。然后,当使用相同的文本重绘行时,它们显示正确(因为行高度没有改变)。

我正在寻找解决此问题的任何建议,最好是设置使表格按照我想要的方式运行,或者在应用渐变之前重新计算行的大小的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);
    }

0 个答案:

没有答案