安卓IMEI智能格式化

今天朋友让我帮忙搞个Imei的格式,我想这还不简单,一顿猛敲后,发现丫的光标位置好坑,现在我记录下我的思路,如果有不好的地方或有待改进的地方,还请各位大佬下面留言,先来个效果图
1.gif
下面是代码
package com.gongwenbo.demo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
/**
 * Imei智能格式填补 12:34:56
 */
public class ImeiActivity extends AppCompatActivity {

    private EditText mEt;
    private int      preLength;
    private boolean flagAfter = true;   
    private boolean flag      = true;
    int index = 0;
    private static final String TAG = "ImeiActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imei);
        mEt = (EditText) findViewById(R.id.et);
        mEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                // 获取光标的位置
                index = mEt.getSelectionStart();
            }
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }
            @Override
            public void afterTextChanged(Editable editable) {
                String content = editable.toString();
                // 判断是添加还是删除,此处要获取第一次的值,因为重新赋值了,他还会走一次
                if (flagAfter) {
                    flag = preLength > content.length() ? true : false;
                }
                flagAfter = !flagAfter;
                // 判断值是否一样,防止死循环
                if (preLength == content.length()) {
                    return;
                }
                // 添加格式,我的是 12:34:45 自行添加
                content = content.replace(":", "");
                char[] chars = content.toCharArray();
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < chars.length; i++) {
                    stringBuilder.append(chars[i]);
                    if (i % 2 == 1 && i != chars.length - 1) {
                        stringBuilder.append(":");
                    }
                }
                preLength = stringBuilder.length();
                String msg = stringBuilder.toString();
                mEt.setText(msg);
                // 防止数组越界
                if (index > preLength) {
                    index = preLength;
                }
                // 如果是添加的话,光标要往后移1
                if (!flag && index >= 1 && msg.toCharArray()[index - 1] == ':') {
                    index = index + 1;
                }
                // 设置光标的位置
                mEt.setSelection(index);
            }
        });
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 老公最近一直在医院奔波,现在人们的亚健康问题越来越多,平时的养生保健是真的很重要。 ...
    Yvonne_57d9阅读 319评论 0 0
  • 影子一:拆迁猛如虎恶如狼 电影一开场便是烈士家被拆迁,还恰遇给烈士办丧事。即使几个战士送骨灰过来,也阻挡不了正在进...
    白千寻阅读 305评论 0 1
  • 仔细想想,最近自己除了工作,有什么事是拖延的么? 有,简书文章评论没有及时回复,字说天下的小伙伴的演讲没有及时点评...
    小碗月牙阅读 317评论 2 4
  • 儒家五常经千年教化,业已融入中华民族之血脉。蒙学经典《三字经》:"曰仁义,礼智信;此五常,不容紊。"五常之说,源于...
    韧性十足的牛皮糖阅读 582评论 0 0
  • 目前网上的主要解决方案是: 1.升级build.gradle中的buildToolsVersion到最新的版本2....
    悠悠的一杯茶阅读 3,631评论 0 0

友情链接更多精彩内容