我怎样才能像在 quora 中那样在 edittext 的末尾加上问号?

How can I put a question mark at the end of the edittext as in quora?

如何在用户输入 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);

请参考下图。

获得它的最佳方法是像这样创建 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中设置了提示而不是设置错误。这样用户将在未输入任何内容时看到文本 "Enter question"。

"Alghoritm" 正在搜索“?”出现在非空输入中。如果它在最后 -> 那么无事可做。如果没有找到,或者在文本中的某处找到 -> 然后在最后添加问号。

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

此代码防止在输入的每个字符中添加问号,一旦 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);
                }
            }

        });
    }

这可能对你有帮助..

boolean flag=true;
questionTxt.addTextChangedListener(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) {
            AskBtn.setBackgroundColor(Color.parseColor("#022B69"));
            if (editable.length() == 0) {
                return;
            }
            if (flag){
                String text = editable.toString();
                int indexOfQuestionMark = text.lastIndexOf("?");
                if (indexOfQuestionMark == -1 || indexOfQuestionMark != text.length() - 1) {
                    editable.append("?");
                    questionTxt.setSelection(1);
                    flag=false;
                }
            }
        }
    });

“Alghoritm”正在搜索“?”出现在非空输入中。如果它在最后 -> 那么无事可做。如果没有找到,或者在文本中的某处找到 -> 然后在最后添加问号。

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

所以如果你看到有 setselection 方法基本上将光标指向特定点。

标志变量也用于停止附加“?”连连问号....