android - 如何在 quora 中的编辑文本末尾添加问号?

标签 android android-edittext textwatcher

当用户输入内容时,如何在 EditText 的末尾添加问号(?)。每个文本更改的问号都应该保留在编辑文本的末尾,就像在 Quora 中发生的那样。我正在使用文本观察器更改文本并将问号放在末尾,但我没有得到确切的逻辑。

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

最佳答案

获得此效果的最佳方法是创建 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”正在搜索“?”出现在非空输入中。如果它在最后 -> 则无需执行任何操作。如果未找到,或在文本内的某处找到 -> 则在末尾添加问号。

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

关于android - 如何在 quora 中的编辑文本末尾添加问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635193/

相关文章:

android - 基本网络.performRequest : Unexpected response code 500 for

android - 在 fragment 事务处理后单击时,EditText消失。

android - 专用编辑模式下的EditText后台控件

android - 在android ListView 中搜索

java - 如何使用 Textwatcher 禁用具有多个编辑文本的按钮?

java - 评分栏,如何获得星数?

android - Google Oauth2 给出 "invalid_request"响应以获取访问 token 和刷新 token

Android布局: left item in horizontal LinearLayout forces right justified text to jumble

java - onBackStackChanged() 在 backstack 中添加新 fragment 时调用两次

android - 在Nexus上onDragEvent()抛出nullpointer