我怎样才能像在 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 方法基本上将光标指向特定点。
标志变量也用于停止附加“?”连连问号....
如何在用户输入 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 方法基本上将光标指向特定点。
标志变量也用于停止附加“?”连连问号....