2012-03-08 4 views
5

3 개의 EditText 요소가 있습니다. 입력에 4 문자가 있으면 한 필드에서 다음 필드로 이동하고 싶습니다.HTC 긴 프레스에서 TextWatcher로 문자 수를 계산할 수 없습니다.

나는 이것에 대한 TextWatcher를 사용

getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() { 
    @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 input) { 
     if(input.length() == 4){ 
      getEditView(R.id.edit_code2).requestFocus(); 
     } 
    } 
}); 

글고의 inputType는 "textCapCharacters"입니다

4를 얻기 위해 R을 잡고 같은 숫자를 얻을 수있는 키에 길게 누르을 수행 할 때 , 대부분의 장치는 사용자가 버튼을 누르고있을 때까지 문자를 추가하지 않고 문자 4를 선택한 후 afterTextChanged를 발생시킵니다. HTC 키보드 (이 경우 2.3.5의 HTC Desire)에서는 그렇지 않습니다. 사용자가 여전히 버튼을 누르고있는 경우에도 R이 EditText에 추가되고 afterTextChanged가 실행되고 코드는 해당 작업을 수행하여 다음 필드에 포커스를 둡니다.

어떻게 이러한 원치 않는 동작을 방지 할 수 있습니까? onKeyDown/Up을 보는 것은 일반적인 키 입력을 등록하지 않기 때문에 도움이되지 않습니다.

답변

1

불행히도 HTC 키보드의 버그로 고칠 수 없습니다. 이것은 IME의 이벤트이므로 터치 또는 키 이벤트를 가로 챌 수 없으므로 사용자가 대신 사용자 대신 다음 입력을 건너 뛰는 것이 좋습니다.

중요한 점이 있다면 필요한 키만 사용하여 자신 만의 종류의 키보드를 구현할 수 있습니다.

+0

그게 제가 두려워했던 것입니다. 고맙습니다. 선택의 여지가 있습니다. 언제나 HTC 키보드에서 longpress 대신 숫자 입력을 사용할 수 있습니다. – Jurriaanr

2
 getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() { 
@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    if(input.length() >3){ 
     getEditView(R.id.edit_code2).requestFocus(); 
@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

@Override 
public void afterTextChanged(Editable input) { 

    } 
} 

});

+0

onTextChanged, beforeTextChanged, afterTextChanged는 edittext에 문자가 추가되기 때문에 키를 누르면 즉시 실행됩니다. 문제는 키보드 소프트웨어의 구현이 사용자가 키를 놓고 숫자를 선택하기 전에 기다리지 않고 모든 이벤트 리스너를 호출하는 것입니다. – Jurriaanr

관련 문제