以编程方式向edittext添加引号

qc6wkl3g  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(499)

我创造了一个 EditText 用户可以在其中键入一个句子。我想在句首和句尾自动加引号。
例如,如果用户类型: Believe you can and you're halfway there. ,我希望它在编辑文本中显示为:

如果有一个选项来添加一个引号的图像,并确保它随着字符串的长度移动,它也可以完成这项工作。
我尝试了类似的方法,但我的应用程序崩溃了:

  1. et_Quote.addTextChangedListener(new TextWatcher() {
  2. @Override
  3. public void onTextChanged(CharSequence s, int start, int before, int count) {
  4. et_Quote.setText( "\" " + s.toString() + "\" ");
  5. }
  6. @Override
  7. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  8. }
  9. @Override
  10. public void afterTextChanged(Editable s) {
  11. }
  12. });

谢谢您

ghhaqwfi

ghhaqwfi1#

如果你用的是硬文本,你可以试试这个。

  1. android:text='"Hello"'

如果没有,那就试试这个。

  1. InputFilter filter = new InputFilter() {
  2. public CharSequence filter(CharSequence source, int start, int end,
  3. Spanned dest, int dstart, int dend) {
  4. char[] chars = {'\'','"'};
  5. for (int i = start; i < end; i++) {
  6. if (new String(chars).contains(String.valueOf(source.charAt(index))) {
  7. return "";
  8. }
  9. }
  10. return null;
  11. }
  12. };
  13. edit.setFilters(new InputFilter[] { filter });
展开查看全部
3qpi33ja

3qpi33ja2#

内部 onTextChanged 你在打电话吗 setText ,调用 onTextChanged 你在里面打电话 setText 等等。。。锁定循环,ui线程挂起
考虑添加一些标志来防止多个 onTextChanged 连续呼叫

  1. et_Quote.addTextChangedListener(new TextWatcher() {
  2. private boolean hold = false;
  3. @Override
  4. public void onTextChanged(CharSequence s, int start, int before, int count) {
  5. if(hold) return;
  6. hold = true;
  7. et_Quote.setText( "\" " + s.toString() + "\"");
  8. hold = false;
  9. }
  10. @Override
  11. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  12. }
  13. @Override
  14. public void afterTextChanged(Editable s) {
  15. }
  16. });

请注意,输入的每个字符 et_Quote 您正在添加 " 开始和结束时 String ,所以会有多个 " 字符,每输入一个字符两个。添加一些代码来检查第一个/最后一个字符是否已经是 " ,如果是,则不要明显添加

  1. boolean isFirst = s.length() != 0 && s.charAt(0) == '"';
  2. boolean isLast = s.length() != 0 && s.charAt(s.length() - 1) == '"';
  3. String toSet = (isFirst ? "" : "\" ") + s.toString().trim() + (isLast ? "" : "\"");
  4. ``` `trim()` 方法删除不必要的空格的开头和结尾 `String` (你不能打电话 `CharSequence` ,因此 `toString()` 在那里用的
展开查看全部

相关问题