如何在编辑文本的末尾添加问号,如同quora一样?

时间:2015-09-17 16:14:24

标签: android android-edittext textwatcher

如何在EditText末尾添加问号(?)作为用户类型。在每个textchanged问号上都应该保留在edittext的末尾,就像在Quora中一样。我正在使用textwatcher来更改文本并将问号放在最后,但我没有得到确切的逻辑。

textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            questionTxt.removeTextChangedListener(textWatcher);
            questionTxt.setText(questionTxt.getText().toString().replace("?", ""));
            questionTxt.setSelection(questionTxt.getText().length()-1);
            questionTxt.setText(questionTxt.getText().toString()+"?");
            questionTxt.addTextChangedListener(textWatcher);
            questionTxt.addTextChangedListener(textWatcher);

        }

        @Override
        public void afterTextChanged(Editable editable) {
            questionTxt.setSelection(editable.length());
            if (questionTxt.getText().toString().length() <= 0)
                questionTxt.setError("Enter question");
        }
    };

    questionTxt.addTextChangedListener(textWatcher);

请参阅下面的图片以供参考。

enter image description here

2 个答案:

答案 0 :(得分:2)

获得这种方法的最佳方法是创建TextWatcher,如下所示:

textWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void afterTextChanged(Editable editable) {
        if (editable.length() == 0) {
            return;
        }

        String text = editable.toString();
        int indexOfQuestionMark = text.lastIndexOf("?");
        if (indexOfQuestionMark == -1 || indexOfQuestionMark != text.length() - 1) {
            editable.append("?");
        }
    }
};

questionTxt.setHint("Enter question")
questionTxt.addTextChangedListener(textWatcher);

只需很少的调整,您的解决方案就可以完美运行:)

我设置了一个提示,而不是设置问题txt中的错误。这样,当没有输入任何内容时,用户将看到文本“输入问题”。

“Alghoritm”正在寻找'?'在非空输入中出现。如果它在最后 - &gt;然后无事可做。如果找不到,或者在文本中找到某个地方 - &gt;然后最后添加问号。

请注意,此TextWatcher实现不依赖于questionTxt,因此您可以将其放在另一个文件中。

答案 1 :(得分:-1)

此代码可防止在输入每个字符时添加问号,并在Edittext内没有任何内容时清除问号。

public void addQuestionMark(final EditText et){

        et.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

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

            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() == 0) {
                    return;
                }

                if("?".equals(s.toString())){
                    s.clear();
                    return;
                }

                String text = s.toString();
                int indexOfQuestionMark = text.lastIndexOf("?");
                if (indexOfQuestionMark == -1 || indexOfQuestionMark != text.length() - 1) {
                    s.append("?");
                    et.setSelection(s.length()-1);
                }
            }

        });
    }