Replace 在Android中使用替换时换行
我使用replacementSpan为每个单词和短语创建背景。 用短短语是正确的,但用长短语是错误的 像这样:Replace 在Android中使用替换时换行,replace,line-breaks,Replace,Line Breaks,我使用replacementSpan为每个单词和短语创建背景。 用短短语是正确的,但用长短语是错误的 像这样: a aa aaa aaa aaaa 123123 213123123123123123123123123 这是我的源代码 public class FrameSpan extends ReplacementSpan { private final Paint mPaint; private int mWidth; public FrameSpan
a aa aaa aaa aaaa
123123
213123123123123123123123123
这是我的源代码
public class FrameSpan extends ReplacementSpan {
private final Paint mPaint;
private int mWidth;
public FrameSpan(int color) {
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setColor(color);
mPaint.setAntiAlias(true);
}
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
mWidth = Math.round(paint.measureText(text, start, end));
return mWidth;
}
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
int line_space = bottom - top;
canvas.drawRect(x, top, x + mWidth, bottom - line_space / 3, mPaint);
canvas.drawText(text, start, end, x, y, paint);
}
}
List<String> tagList = /* the list of phrases */
int[] tagEndingIndex = /* the array contains the ending index of each phrases*/
StringBuilder stringBuilder = /* the complete text created from tagList */
SpannableString spannableString = new SpannableString(stringBuilder.toString());
for (int i = 0; i < tagEndingIndex.length; i++) {
int tagEndPos = tagEndingIndex[i];
String currentTag = tagList.get(i);
spannableString.setSpan(new FrameSpan(color), tagEndPos - currentTag.length() - 4, tagEndPos, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
TextView.setText(spannableString, BufferType.SPANNABLE);
public类FrameSpan扩展了ReplacementSpan{
私人最终油漆;
私人英特姆维兹;
公共框架跨度(整型颜色){
mPaint=新油漆();
mPaint.setStyle(绘制、样式、填充和笔划);
mPaint.setColor(颜色);
mPaint.setAntiAlias(true);
}
@凌驾
公共int getSize(Paint、CharSequence文本、int开始、int结束、Paint.FontMetricsInt fm){
mWidth=Math.round(paint.measureText(text,start,end));
返回mWidth;
}
@凌驾
公共空白绘制(画布、字符序列文本、int开始、int结束、浮点x、int顶部、int y、int底部、绘制){
int line_space=底部-顶部;
画布.drawRect(x,顶部,x+mWidth,底部线+空格/3,mPaint);
画布.drawText(文本、开始、结束、x、y、绘制);
}
}
List tagList=/*短语列表*/
int[]tagEndingIndex=/*数组包含每个短语的结束索引*/
StringBuilder StringBuilder=/*根据标记列表创建的完整文本*/
SpannableString SpannableString=新的SpannableString(stringBuilder.toString());
对于(int i=0;i
对于长短语,我希望将其省略。
请帮帮我。非常感谢您尝试过android:ellipsize属性吗?我认为许多与文本相关的视图组件都具有此属性。很抱歉,因为没有图像。我的声誉不超过10。把img url放在问题中,我们会为您添加它。我想TextView可以配置ellipsize吗?