我想問問,如何實現(xiàn)Android textview的部分字體變色并且整個段落左右對齊,你們有沒有類似的demo?我搞了好幾天都沒實現(xiàn),現(xiàn)在參照網(wǎng)上的代碼,實現(xiàn)了段落對齊,然后分開使用Android HTML解析實現(xiàn)了部分文字變色,但是最后把它們兩融在一起的時候,顏色就失效了,這個怎么破?代碼如下
=?;;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()?-?)?!=?;
????}
}
//使用正則表達式提取關(guān)鍵字
setText(CharSequence?text,?BufferType?type)?{
????=?Pattern.();
????=?.matcher(text);
????String?s?=?text.toString();
????(i?=?;?.find();?i++)?{
????????[i]?=?.group().replaceAll(,?);
????????s?=?s.replaceAll(,?).replace([i],?);
????}
????text?=text.toString().replaceAll(,?);
????.setText(text,?type);
}
添加回答
舉報
0/150
提交
取消