美文网首页
Android-->自定义模版EditText(多用于手机

Android-->自定义模版EditText(多用于手机

作者: angcyo | 来源:发表于2017-04-27 08:46 被阅读113次

    先看看效果图:


    这里写图片描述 这里写图片描述 这里写图片描述

    方法其实很简单,都没啥好写的咯;

    简单说一下思路吧:

    1:首先从模版中,拿到关键点所在的位置,保存在List中.

    private void initView() {
       if (!TextUtils.isEmpty(patternString)) {
           for (int i = 0; i < patternString.length(); i++) {
               if (splitList.contains(patternString.charAt(i))) {
                   separatorPosition.add(i);
               }
           }
       }
    }
    

    2:当onKeyUp事件发生的时候,检测文本,循环遍历getText(),如果是关键位置,就插入分隔符,否则如果是分隔符不在关键位置上,就删除,并且重新检查.

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
       if (keyCode == KeyEvent.KEYCODE_DEL) {
           //解决长按删除键无法删除的BUG
           removeCallbacks(delayCheck);
           postDelayed(delayCheck, 100);
       } else {
           checkPattern();
       }
       return super.onKeyUp(keyCode, event);
    }
    
    private void checkPattern() {
       StringBuffer rawText = new StringBuffer(getText());
       int selectionStart = getSelectionStart();
       for (int i = 0; i < rawText.length(); i++) {
           char charAt = rawText.charAt(i);
           if (charAt == separatorChar) {
               rawText.delete(i, i + 1);
               if (i < selectionStart) {
                   selectionStart--;
               }
               i--;
           } else if (isKeyPosition(i)) {
               rawText.insert(i, separatorChar);
               if (i < selectionStart) {
                   selectionStart++;
               }
           }
       }
       setText(rawText);
       setSelection(Math.min(rawText.length(), selectionStart));
    }
    
    private boolean isKeyPosition(int position) {
       return separatorPosition.contains(position);
    }
    

    3:没了.

    需要注意的就是:
    1:当插入分隔符之后,需要考虑光标的位置.
    2:当长按删除键的时候,要处理一下,否则会无法实现长按删除.


    源码:
    https://github.com/angcyo/RJcenter/blob/master/rsen/src/main/java/com/rsen/view/PatternEditText.java

    至此: 文章就结束了,如有疑问: QQ群:274306954 欢迎您的加入.

    相关文章

      网友评论

          本文标题:Android-->自定义模版EditText(多用于手机

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