마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

edittext 원하는 문자 입력하기

0 추천

지난번에도 올렸던 질문이고 해결된 줄 알았더니 다른 기기에서 안되서요ㅜㅜ

안드로이드 태블릿등(안드로이드 버전 6.0, 7.0)에서는 해결이 되었는데

안드로이드 폰(안드로이드 버전 8.0에서만 테스트 차후 6.x에서 테스트 할 예정)에서는 원하는 값이 아닌 값을 입력하면 글자가 사라집니다

제가 설정한 패턴은 "^[a-fA-F0-9]+$"인데

폰에서 abctttsss012이런 식으로 입력하면 edittext에는 abc012 이렇게 보여야하는데 그냥 모든 값을 없애버립니다 한글 입력할 때는 정상적으로 입력이 안되는걸로만 나오고요

또 어쩔 때는 전체 값을 지우는게 아니라 abctttssss라고 입력하면 abc만 보이긴 하지만 뒤에 다른 문자가 입력이 되지 않고 백스페이스로 tttssss 갯수만큼 지워야 입력이 되게 합니다ㅜㅜ

이게 버전차이일까요 아니면 폰과 태블릿의 문제일까요??

 

----------------------------------------

내용추가합니다 태블릿에서도 해당 문제가 발생하네요...

public InputFilter filterAlphaNum = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        Pattern pattern = Pattern.compile("^[a-fA-F0-9]+$");
        if(!pattern.matcher(source).matches()){
            return "";
        }

        return null;

    }
};
빈길 (1,270 포인트) 님이 2018년 1월 4일 질문
빈길님이 2018년 1월 9일 수정

1개의 답변

0 추천

일전에 답변 드릴때는 Nexus 5(Android 6.0.1)에서 확인하였는데, Android 8.x 기기가 없어서 확인이 불가능한게 조금 아쉽네요.

InputFilter 을 다음과 같이 수정하면 어떨까 생각됩니다. android:inputType은 확인해보니 text로 하여도 무난해 보이며, 미지정하여도 동작하는것을 Nexus 5에서 확인하였습니다.

Pattern pattern = Pattern.compile("^[a-fA-F0-9]+$");

StringBuffer buffer = new StringBuffer();
for(int i = 0; i < source.length(); i++) {
  String letter = String.valueOf(source.charAt(i));

  if(pattern.matcher(letter).matches()) {
    buffer.append(letter);
  }
}

return buffer.toString();

 

눈빛 (4,120 포인트) 님이 2018년 1월 4일 답변
눈빛님이 2018년 1월 5일 수정
adb라고 입력하면 aadadb이런식으로 앞에 입력했던것이 반복해서 뜨네요...ㅠ
마찬가지로 6.0.1버전이에요
...