2017-12-11 2 views
0

이 코드를 사용하여 3 번째 및 4 번째 숫자 뒤에 전화 번호에 대시 ('-')를 추가합니다. 코드가 잘 작동합니다. 내 문제는 백 스페이스 키를 누르면 대시를 제거 할 수 없다는 것입니다. 백 스페이스를 누르면 도트를 추가하고 삭제할 수 있지만 대시는 사용할 수 없습니다.숫자 editText에서 숫자가 아닌 문자 삭제

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     MainActivity.headerName.setText("Verification"); 
     phoneNumber = (EditText) getActivity().findViewById(R.id.phoneEditText); 
     int grup = 1; 

     phoneNumber.addTextChangedListener(new TextWatcher() { 

      int keyDel; 
      String a= phoneNumber.getText().toString(); 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

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

      phoneNumber.setOnKeyListener(new View.OnKeyListener() { 
       @Override 
       public boolean onKey(View v, int keyCode, KeyEvent event) { 

        if (keyCode == KEYCODE_DEL) { 
         a = a.replace("-" , ""); 
         phoneNumber.setText(a); 

         keyDel = 1; 
        } 
        return false; 
       } 
      }); 

      if (keyDel == 0) { 
       int len = phoneNumber.getText().length(); 
       if(len == 3 || len == 7) { 
        phoneNumber.setText(phoneNumber.getText() + "-"); 
       phoneNumber.setSelection(phoneNumber.getText().length()); 
       } 
      } else { 
       if(KeyEvent.isModifierKey(KEYCODE_DEL)) { 
        a = a.replace("-" , ""); 
        phoneNumber.getText().toString().replace("-" , ""); 
        phoneNumber.setText(a); 
       } 
       keyDel = 0; 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 
} 

답변

0

UI 위젯이 텍스트 서식을 지정하고 있습니다. 따라서 하이픈을 제거한 후 위젯이 다시 가져옵니다.

위젯을 그대로 두는 것이 좋습니다. 대신 전화 번호를 사용해야 할 경우 값에서 서식 지정 문자를 제거하십시오.

String.replaceAll("[^\\d]", "") 

일부 외부 사용을 위해 위젯에서 값을 검색 할 때이 코드를 사용합니다. 따라서 메서드가있을 수 있습니다.

public String getPhoneNumberUnformatted() {...} 

위젯 값의 숫자 만 반환합니다.

+0

어디서이 코드를 삽입해야합니까? aldeady는 "onKey"함수 내부와 if-else 내부에서 시도했습니다. 작동하지 않습니다. –

관련 문제