美文网首页
EditText 实现微信每次删除@的一个昵称

EditText 实现微信每次删除@的一个昵称

作者: 67fe3ca0e025 | 来源:发表于2019-08-24 13:20 被阅读0次

EditText要实现每次删除固定位置的@的昵称,其实就是要在字符串中查找到每个昵称的开始和结束位置。这边用正则表达式匹配的每个昵称的位置。具体代码如下


        editText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int keyCode, KeyEvent event) {
                EditText editText = (EditText) view;
                Editable editable = editText.getText();
                //获取光标所在位置
                int selectionStart = editText.getSelectionStart();
                String content = editable.toString().substring(0, selectionStart);
                Pattern pattern = Pattern.compile(".*@.+\\s");
                Matcher matcher = pattern.matcher(content);
                //查询字符串中是否有以@开头和空格结尾的格式
                if (matcher.find() && event.getAction() == KeyEvent.ACTION_DOWN) {
                    if (TextUtils.equals(matcher.group(), content) && keyCode == KeyEvent.KEYCODE_DEL) {
                        ArrayList<Integer> indexs = new ArrayList<>();
                        Pattern patternSub = Pattern.compile("@.+?\\s");
                        Matcher matcherSub = patternSub.matcher(content);
                        while (matcherSub.find()) {
                            indexs.add(matcherSub.start());
                        }
                        if (indexs.size() > 0) {
                            //删除距离光标最近的符合筛选逻辑的字符串
                            editable.delete(indexs.get(indexs.size() - 1),content.length());
                            return true;
                        }
                    }
                }
                return false;
            }
        });

    ~~~

相关文章

网友评论

      本文标题:EditText 实现微信每次删除@的一个昵称

      本文链接:https://www.haomeiwen.com/subject/oiafectx.html