0

この (888) 777-7777 形式の電話番号を使用したいと考えています。私は「888-777-7777」の形式の数字です。コードを editTextChangedListener に入れました。目的の形式を表示するにはどうすればよいですか?

edt_clientphone.addTextChangedListener(new TextWatcher() {              
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub      

             boolean flag = true;
             String eachBlock[] = edt_clientphone.getText().toString().split("-");
             for (int i = 0; i < eachBlock.length; i++) 
             {
                 if (eachBlock[i].length() > 3)
                 {
                     Log.v("data","cc"+flag + eachBlock[i].length());
                 }
             }
             if(flag){
                 edt_clientphone.setOnKeyListener(new OnKeyListener() {

                     @Override
                    public boolean onKey(View v, int keyCode, KeyEvent event) {
                        // TODO Auto-generated method stub
                        if (keyCode == KeyEvent.KEYCODE_DEL)
                             keyDel = 1;
                        return false;
                    }
                 });

                 if (keyDel == 0) {

                     if (((edt_clientphone.getText().length() + 1) % 4) == 0) 
                     {
                         if (edt_clientphone.getText().toString().split(")").length <= 2) 
                         {
                             edt_clientphone.setText(edt_clientphone.getText() + "-");
                             edt_clientphone.setSelection(edt_clientphone.getText().length());
                         }
                     }
                     ab = edt_clientphone.getText().toString();
                 }
                 else
                  {
                     ab = edt_clientphone.getText().toString();
                     keyDel = 0;
                 }

             } else {
                 edt_clientphone.setText(ab);
             }       
            }       
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
4

4 に答える 4

7

この方法は魅力のように機能します

EditText edt_clientphone = (EditText) findViewById(R.id.edt_clientphone);
        InputFilter filter = new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                if (source.length() > 0) {

                    if (!Character.isDigit(source.charAt(0)))
                        return "";
                    else {
                        if (dstart == 3) {
                            return source + ") ";
                        } else if (dstart == 0) {
                            return "(" + source;
                        } else if ((dstart == 5) || (dstart == 9))
                            return "-" + source;
                        else if (dstart >= 14)
                            return "";
                    }

                } else {

                }

                return null;

            }
        };

        edt_clientphone.setFilters(new InputFilter[] { filter });

addTextChangedListener() を設定しないでください。

出力

ここに画像の説明を入力

于 2013-09-26T06:17:52.723 に答える
1

(888)777-7777 を変換する場合、以下のコードが機能します

 InputFilter filter = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                if (source.length() > 0) {
                    if (!Character.isDigit(source.charAt(0)))
                        return "";
                    else {
                        if (source.toString().length() > 1) {
                            String number = source.toString();
                            char[] digits1 = number.toCharArray();
                            String[] digits2 = number.split("(?<=.)");
                            source = digits2[digits2.length - 1];
                        }
                        if (etPhone.getText().toString().length() < 1) {
                            return "(" + source;
                        } else if (etPhone.getText().toString().length() > 1 && etPhone.getText().toString().length() <= 3) {
                            return source;
                        } else if (etPhone.getText().toString().length() > 3 && etPhone.getText().toString().length() <= 5) {
                            boolean isContain = dest.toString().contains(")");

                            if (isContain) {
                                return source;
                            } else {
                                return ")" + source;
                            }

                        } else if (etPhone.getText().toString().length() > 5 && etPhone.getText().toString().length() <= 7) {
                            return source;
                        } else if (etPhone.getText().toString().length() > 7) {
                            boolean isContain = dest.toString().contains("-");

                            if (isContain) {
                                return source;
                            } else {
                                return "-" + source;
                            }
                        }
                    }
                } else {
                }
                return source;
            }
        };

 etPhone.setFilters(new InputFilter[]{filter});

キーボード設定(予測テキスト)とその作業も変更してください

于 2015-11-25T00:34:27.540 に答える
0

このライブラリを使用してみてください。Android で内部的に使用されていますが、公開されていないため、プロジェクトにインポートする必要があります。

電話番号の書式設定には、次を使用します。

AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("US");

于 2013-09-26T06:50:31.817 に答える