Android 编辑每行的文本前缀

Android 编辑每行的文本前缀,android,android-edittext,Android,Android Edittext,当用户在EditText中输入文本时,需要自动向每行添加前缀“*” 示例: *第一行是一些文本 *第二行有一些文字 我该怎么做?如果希望在用户键入时发生这种情况,请与onTextChanged()或posterextchanged()回调一起使用 或者,如果您在他们更改文本并转到下一个EditText后需要它,您可以自己获取值并在星号前面加上前缀 在您的PostTextChanged()中,您可以执行以下操作: @Override public void afterTextChanged

当用户在EditText中输入文本时,需要自动向每行添加前缀“*”

示例:

*第一行是一些文本

*第二行有一些文字


我该怎么做?

如果希望在用户键入时发生这种情况,请与
onTextChanged()
posterextchanged()
回调一起使用

或者,如果您在他们更改文本并转到下一个
EditText
后需要它,您可以自己获取值并在星号前面加上前缀

在您的
PostTextChanged()
中,您可以执行以下操作:

@Override
    public void afterTextChanged(Editable s) {
        if(!s.toString().startsWith("*")){
           yourEditText.setText("*" + yourEditText.getText().toString());
        }

    }

由于您不希望星号成为可编辑文本的一部分,我们可以在每行的开头绘制星号。为此,我们对
EditText
进行子类化,并重写
onDraw()
方法,迭代行,并计算每行的边界以确定在何处绘制字符。绘制星号后,我们调用
super.onDraw()
方法,以允许
EditText
完成文本、光标、选择等的绘制

public class StarredEditText extends EditText {
    private static final String ASTERISK = "*";

    private float padding;
    private Paint paint;

    public StarredEditText(Context context) {
        this(context, null);
    }

    public StarredEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint = getPaint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        int baseline;
        final int count = getLineCount();

        for(int i = 0; i < count; i++) {
            baseline = getLineBounds(i, null);
            canvas.drawText(ASTERISK, padding, baseline, paint);
        }

        super.onDraw(canvas);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        Rect rect = new Rect();
        getLineBounds(0, rect);
        padding = (rect.left - paint.measureText(ASTERISK)) / 2;
    }
}
public类StarredEditText扩展EditText{
私有静态最终字符串星号=“*”;
私人浮动填充;
私人油漆;
公共星号编辑文本(上下文){
这个(上下文,空);
}
公共星号编辑文本(上下文、属性集属性){
超级(上下文,attrs);
paint=getPaint();
}
@凌驾
受保护的void onDraw(画布){
int基线;
最终整数计数=getLineCount();
for(int i=0;i
是否希望它成为实际文本的一部分;i、 例如,可复制、可删除等。?还是希望它更像IDE中的行号?@MikeM。谢谢你的回复。当用户在字段中输入/删除一些文本到符号开头添加的每一行时,我希望这样做。对,但假设我选择并复制了示例中的第一行。它应该复制“*第一行一些文本”,还是只复制“第一行一些文本”,而不带星号?也就是说,“*”是可编辑文本的一部分吗?如果是,可以删除吗?@MikeM。如果复制文本,它将是不带符号*的复制。我希望在用户键入时发生这种情况。我尝试使用TextWatcher。我尝试计数所有行,将每行作为字符串,添加前缀,然后使用StringBuilder在一个字符串中添加所有行,然后清除文本并再次设置文本。