android TextView遇到的问题

来源:互联网 发布:洪恩软件开天辟地7 编辑:程序博客网 时间:2024/05/19 17:50


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


0 0
原创粉丝点击