EditText setSpan表示特殊字符

时间:2016-07-21 08:42:19

标签: android

如何设置特殊字符的范围,例如\ n \ t \ r \ n等?现在,如果我这样做:

var component = new (<Type>Function)();
var annotations = [
    new Component({
        selector: "foo"
    }),
    new View({
        template: text,
        directives: [WordDirective]
    })
];

// I know this will not work everywhere
Reflect.defineMetadata("annotations", annotations, component);

// compile the component
this.compiler.compileInHost(<Type>component).then((protoViewRef: ProtoViewRef) => {
    this.viewContainer.createHostView(protoViewRef);
});

由于

2 个答案:

答案 0 :(得分:0)

不是100%确定我理解这个问题,因为特殊字符O(1)Dictionary是换行符,所以它们如何被设置为因为它们将是不可见的?

也就是说,这是一种在'\n'中设置某些'\r'样式的方法。您可以在方法的末尾添加任意数量的字符,并对这些字符的任何实例进行样式设置。

char

答案 1 :(得分:0)

通过Draw函数修复了我,这里是EditText的代码:

if(getText().toString().substring(start,end).indexOf("\t")>=0
            || getText().toString().substring(start,end).indexOf("\n")>=0
            || getText().toString().substring(start,end).indexOf("\r")>=0) {
        TextPaint paint = new TextPaint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(mBackgroundColor);
        paint.bgColor = mBackgroundColor;

        Layout layout = getLayout();
        int line = layout.getLineForOffset(start);
        int baseline = layout.getLineBaseline(line);
        int ascent = layout.getLineAscent(line);
        float x = layout.getPrimaryHorizontal(start);
        float y = baseline + ascent;

        Rect rect = new Rect();
        //rect.set(start, 0, Math.round(layout.getSecondaryHorizontal(end)), getLineHeight()+5);
        rect.set(start, 0, Math.round(layout.getSecondaryHorizontal(end)), getLineHeight()+5);
        rect.offset(Math.round(x), Math.round(y));

        Log.d("debug","tabs " + rect.toString());
        canvas.drawRect(rect, paint);
    }