Replace 在Android中使用替换时换行

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

我使用replacementSpan为每个单词和短语创建背景。 用短短语是正确的,但用长短语是错误的

像这样:

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吗?