如何在EditText中分割文本?

时间:2015-05-25 09:39:00

标签: android android-edittext

我需要在EditText中输入文本(数字),我想将数字组除以4位数。

如果我输入000000000000我希望看到类似0000 0000 0000的内容。

我的EditText:

        @NotEmpty
        @InjectView(R.id.paymentCode)
        EditText paymentCodeField;
...

    paymentCodeField.setOnTouchListener(eventHandler);
...

我认为它需要听众,但我不知道它是怎么做的。

我试过下面的代码

paymentCodeField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

但我不知道如何使用它。

5 个答案:

答案 0 :(得分:2)

获得它的一种方法是创建一个面具,但是android不会帮助我们达到这个目的。

您可以实现自己的蒙版,也可以使用库。

https://github.com/toshikurauchi/MaskedEditText/tree/master/MaskedEditText

<br.com.sapereaude.maskedEditText.MaskedEditText 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    mask:mask="#### #### ####"
/>

答案 1 :(得分:1)

1。添加count个全局变量来计算输入char的数量。

2。count内更新onTextChanged()并在afterTextChanged()内添加检查。

3。如果计数等于4,则将space添加到当前可编辑的text并将其设置为EditText并更改{ {1}}持续使用cursor方法的位置。

4。最后,为下一个输入留下setSelection()值。

以下是工作代码:

count

<强>输出:

enter image description here

希望这会有所帮助〜

答案 2 :(得分:0)

试试这个:这是电话号码

_edtphonenumber=(EditText)findViewById(R.id.editText_phonenumber);

    _edtphonenumber.setTypeface(trajan_pro_regular);
    _edtphonenumber.addTextChangedListener(new TextWatcher() {
        private boolean mFormatting; // this is a flag which prevents the  stack overflow.
        private int mAfter;

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // nothing to do here.. 
        }

        //called before the text is changed...
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            //nothing to do here...
            mAfter  =   after; // flag to detect backspace..

        }

        @Override
        public void afterTextChanged(Editable s) {
            // Make sure to ignore calls to afterTextChanged caused by the work done below
            if (!mFormatting) {
                mFormatting = true;
                // using US formatting...
                if(mAfter!=0) // in case back space ain't clicked...
                    PhoneNumberUtils.formatNumber(s,PhoneNumberUtils.getFormatTypeForLocale(Locale.US));                             
                mFormatting = false;
            }
        }
    });

答案 3 :(得分:0)

您应该将代码写入beforeTextChanged

paymentCodeField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() % 4 == 0) paymentCodeField.setText(charSequence.toString() + " ");
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

您可以自定义输入编辑文本,它会帮助您!!

答案 4 :(得分:0)

更改文本后,替换所有空格并在请求位置插入空格

paymentCodeField.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            s.toString().replace(" ","");

            if(s.toString().length()>4 && s.toString().charAt(4)!=' ')
                s.insert(4," ");

            if(s.toString().length()>9 && s.toString().charAt(9)!=' ')
                s.insert(9," ");
        }
    });