1.高亮显示TextView的文本内容。
ssb.setSpan(new BackgroundColorSpan(mContext.getResources().getColor(R.color.bg_yellow1)),
start,end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
当文本内容中包含ImageSpan,会出现
产生问题的原因:
文字:
c.drawTextRun(mChars, start, count, contextStart, contextCount,
x, y, flags, wp);
图片:
Drawable b = getCachedDrawable();
canvas.save();
int transY = bottom - b.getBounds().bottom;
if (mVerticalAlignment == ALIGN_BASELINE) {
transY -= paint.getFontMetricsInt().descent;
}
canvas.translate(x, transY);
b.draw(canvas);
canvas.restore();
可以看出:文字,图片画在画布的不同位置上,而BackgroundColorSpan是在改变drawTextRun()的TextPaint对象wp.bgColor
解决方法:
自定义ImageSpan,重写ImageSpan.draw()方法
Drawable b = getDrawable();
canvas.save();
int transY = bottom - b.getBounds().bottom;
if (mVerticalAlignment == ALIGN_BASELINE) {
transY -= paint.getFontMetricsInt().descent;
}
paint.setColor(bgColor);
Rect r = new Rect((int) x, top,
(int) (x + (b.getBounds().right - b.getBounds().left)), bottom);
canvas.drawRect(r, paint);
canvas.translate(x, transY);
b.draw(canvas);
canvas.restore();
2.TextView的网址URLSpan click与long click冲突, 执行了longclick,还执行了click
产生问题的原因:
URLSpan.onClick 是在onTouchEvent中, action=ACTION_UP时,
而longclick是在action=ACTION_DOWN时,postDelay(Runnable),在Runnable中执行onLongClick
解决方法:
因此需要在onLongClick发生时,作出标记,
当action=ACTION_UP时,根据标记判断是否还要执行click