在Android中,如何使用“AAA-AAA-AAA”格式将字符串格式化为EditText

在Android中,如何使用“AAA-AAA-AAA”格式将字符串格式化为EditText,android,android-edittext,android-input-filter,Android,Android Edittext,Android Input Filter,我需要输入9个大写字母,用破折号分隔,如AAA-AAA-AAA和 输入时必须格式化此输入 提前感谢。您可以通过文本更改列表来完成此操作 当文本大小%3==0插入字符时,可以通过文本更改列表器执行此操作 当文本大小%3==0插入字符时,我使用TextWatcher找到了解决方案。我正在使用 android:inputType=textCapCharacters | textNoSuggestions 用于EditText输入类型,以便仅接收大写字母 txtCode = (EditT

我需要输入9个大写字母,用破折号分隔,如AAA-AAA-AAA和 输入时必须格式化此输入


提前感谢。

您可以通过文本更改列表来完成此操作


当文本大小%3==0插入字符时,可以通过文本更改列表器执行此操作


当文本大小%3==0插入字符时,我使用TextWatcher找到了解决方案。我正在使用

android:inputType=textCapCharacters | textNoSuggestions

用于EditText输入类型,以便仅接收大写字母

        txtCode = (EditText) findViewById(R.id.txtCode);

        txtCode.addTextChangedListener( new TextWatcher() {
            boolean isEdiging;
            @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(isEdiging) return;
                isEdiging = true;
                // removing old dashes
                StringBuilder sb = new StringBuilder();
                sb.append(s.toString().replace("-", ""));

                if (sb.length()> 3)
                    sb.insert(3, "-");
                if (sb.length()> 7)
                    sb.insert(7, "-");
                if(sb.length()> 11)
                    sb.delete(11, sb.length());

                s.replace(0, s.length(), sb.toString());
                isEdiging = false;
            }
        });

我使用TextWatcher找到了解决方案。我正在使用

android:inputType=textCapCharacters | textNoSuggestions

用于EditText输入类型,以便仅接收大写字母

        txtCode = (EditText) findViewById(R.id.txtCode);

        txtCode.addTextChangedListener( new TextWatcher() {
            boolean isEdiging;
            @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(isEdiging) return;
                isEdiging = true;
                // removing old dashes
                StringBuilder sb = new StringBuilder();
                sb.append(s.toString().replace("-", ""));

                if (sb.length()> 3)
                    sb.insert(3, "-");
                if (sb.length()> 7)
                    sb.insert(7, "-");
                if(sb.length()> 11)
                    sb.delete(11, sb.length());

                s.replace(0, s.length(), sb.toString());
                isEdiging = false;
            }
        });

这篇文章可能会帮助您这篇文章可能会帮助您直接修改可编辑文本,而不是在EdtiText上调用setText是一种很好的方法,因为它简化了光标的设置。直接修改可编辑文本而不是在EdtiText上调用setText是一种很好的方法,因为它简化了光标的设置。