以编程方式向edittext添加引号

qc6wkl3g  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(459)

我创造了一个 EditText 用户可以在其中键入一个句子。我想在句首和句尾自动加引号。
例如,如果用户类型: Believe you can and you're halfway there. ,我希望它在编辑文本中显示为:

如果有一个选项来添加一个引号的图像,并确保它随着字符串的长度移动,它也可以完成这项工作。
我尝试了类似的方法,但我的应用程序崩溃了:

et_Quote.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        et_Quote.setText( "\" " + s.toString() + "\" ");
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

谢谢您

ghhaqwfi

ghhaqwfi1#

如果你用的是硬文本,你可以试试这个。

android:text='"Hello"'

如果没有,那就试试这个。

InputFilter filter = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {
        char[] chars = {'\'','"'};
        for (int i = start; i < end; i++) {
            if (new String(chars).contains(String.valueOf(source.charAt(index))) {
                return "";
            }
        }
        return null;
    }
};
edit.setFilters(new InputFilter[] { filter });
3qpi33ja

3qpi33ja2#

内部 onTextChanged 你在打电话吗 setText ,调用 onTextChanged 你在里面打电话 setText 等等。。。锁定循环,ui线程挂起
考虑添加一些标志来防止多个 onTextChanged 连续呼叫

et_Quote.addTextChangedListener(new TextWatcher() {

    private boolean hold = false;

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(hold) return;
        hold = true;
        et_Quote.setText( "\" " + s.toString() + "\"");
        hold = false;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

请注意,输入的每个字符 et_Quote 您正在添加 " 开始和结束时 String ,所以会有多个 " 字符,每输入一个字符两个。添加一些代码来检查第一个/最后一个字符是否已经是 " ,如果是,则不要明显添加

boolean isFirst = s.length() != 0 && s.charAt(0) == '"';
boolean isLast = s.length() != 0 && s.charAt(s.length() - 1) == '"';
String toSet = (isFirst ? "" : "\" ") + s.toString().trim() + (isLast ? "" : "\"");
``` `trim()` 方法删除不必要的空格的开头和结尾 `String` (你不能打电话 `CharSequence` ,因此 `toString()` 在那里用的

相关问题