快捷导航

急求,如何实现Android textview的部分字体变色并且整个段落左右对齐

我想问问,如何实现Android textview的部分字体变色并且整个段落左右对齐,你们有没有类似的demo?我搞了好几天都没实现,现在参照网上的代码,实现了段落对齐,然后分开使用Android HTML解析实现了部分文字变色,但是最后把它们两融在一起的时候,颜色就失效了,这个怎么破?


代码如下
= ;;TextPaint ;String = ;Pattern ;Matcher ;String[] = String[];String[] = String[];JustifyTextView(Context context) {    (context);    init();}JustifyTextView(Context context, AttributeSet attrs) {    (context, attrs);    init();}JustifyTextView(Context context, AttributeSet attrs, defStyleAttr) {    (context, attrs, defStyleAttr);    init();}init() {    = getPaint();    .setColor(getCurrentTextColor());    .= getDrawableState();}onDraw(Canvas canvas) {    = ;    = getMeasuredWidth();+= getTextSize();    String text = getText().toString();    Layout layout = getLayout();    lineCount = layout.getLineCount();    (i = ; i < lineCount; i++) {lineStart = layout.getLineStart(i);        lineEnd = layout.getLineEnd(i);        String lineText = text.substring(lineStart, lineEnd);(needScale(lineText)) {            (i == lineCount - ) {(lineText.indexOf() != -||lineText.indexOf() != -)                    .setColor(Color.);                .setColor(Color.);                canvas.drawText(lineText, , , );            } {                (lineText.indexOf() != -||lineText.indexOf() != -)                    .setColor(Color.);                .setColor(Color.);                width = StaticLayout.(text, lineStart, lineEnd, );                drawScaleText(canvas, lineText, width);            }        } {            canvas.drawText(lineText, , , );        }        += getLineHeight();}}drawScaleText(Canvas canvas, String lineText, lineWidth) {    x = ;    (isFirstLineOfParagraph(lineText)) {        String blanks = ;        canvas.drawText(blanks, x, , );        width = StaticLayout.(blanks, );        x += width;        lineText = lineText.substring();    }    interval = (- lineWidth) / (lineText.length() - );    (i = ; i < lineText.length(); i++) {        String character = String.(lineText.charAt(i));        cw = StaticLayout.(character, );        canvas.drawText(character, x, , );        x += (cw + interval);    }}isFirstLineOfParagraph(String lineText) {    lineText.length() > && lineText.charAt() == && lineText.charAt() == ;}needScale(String lineText) {    (lineText.length() == ) {        ;    } {        lineText.charAt(lineText.length() - ) != ;    }}//使用正则表达式提取关键字setText(CharSequence text, BufferType type) {    = Pattern.();    = .matcher(text);    String s = text.toString();    (i = ; .find(); i++) {         = .group().replaceAll(, );        s = s.replaceAll(, ).replace(, );    }    text =text.toString().replaceAll(, );    .setText(text, type);}

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

上面的代码错 了,代码如下
110001kna480zr8j66mq68.jpg
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP