如何在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);
请参阅下面的图片以供参考。
答案 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);
}
}
});
}