soft keyboard control ( show & hide )
- 프로그램을 하다 보면 soft keyboard ( 정확히 말하면 software keyboard 로 물리적인 키보드가 아닌 화면에 나오는 가상의 키보드 ) 를 control 할 일들이 있습니다. 이는 InputMethodManager 를 통해서 control이 가능한데요, API 에서는 지원은 하지만 method 들이 제대로 작동하지 않는 경우를 맞딱뜨리게 됩니다. 예를 들면 hideSoftInputFromWindow와 showSoftInputFromWindow 가 제대로 작동하지 않는 경우가 생기죠. 암만 둘을 호출해도 전혀 미동이 없는 경우가 다반사입니다. 왜 그럴까요?
hideSoftInputFromWindow 와 showSoftInputFromWindow 가 제대로 작동하지 않는 이유.
- Activity 가 뜨면서 & EditText 를 touch 함으로써 system 이 자동으로 soft keyboard 를 띄운 경우에는 toggleSoftInput 함수로만 soft keyboard 를 컨트롤을 할 수 있습니다. 사실 그 soft keyboard 는 해당 edittext 의 token을 가지고 띄운 것이 아니기 때문이지요.
그럼 어쩌란 말이요?
- 그래서 edittext 의 softkeyboard 를 control 하려면, show 자체를 InputMethodManager 를 통해 호출하여야, hide 역시 InputMethodManager를 통해 control 가능합니다. 이 때 같은 window token 을 사용해야 합니다.
- 위에서 언급한 것과 같이 EditText를 터치했을 때도 Soft keyboard 가 자동으로 뜨는데 이 역시도 EditText의 Window Token 이 이용되지 않고 System 을 통해 keyboard 를 띄우기 때문에 Touch 를 통해 나온 Keyboard 는 InputMethodManager 로 감추기가 어렵습니다. ( toggle 로 가능하긴 하지만.. ) 따라서 터치 시 자동으로 soft keyboard를 띄우는 현상을 막고, 프로그램적으로 직접 띄우고 마찬가지로 프로그램적으로 직접 하이드를 해야 합니다. 이는 간단히 EditText에 OnTouchListener 를 set 함으로서 가능한다.
말만 말고 코드를 보여달라. OK!!
editText.setOnTouchListener( new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
showSoftkeyboard(); // 프로그램적으로 keyboard 를 띄운다.
return true; // true 를 전달함으로서 시스템이 keyboard 를 띄우지 못하게 한다.
}
});private void showSoftkeyboard(){
InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE );
imm.showSoftInput( editText, 0 );
}
private void hideSoftKeyboard(){
InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE );
imm.hideSoftInputFromWindow( editText.getWindowToken(), 0 );
}'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] float 으로 된 위경도값을 GeoPoint 에 사용하려면? (0) | 2012.10.19 |
---|---|
[android] activity가 실행될 때 자동으로 EditText의 soft keyboard 가 뜨는 현상 방지 방법 (0) | 2012.10.19 |
[android] signkey 생성방법 (0) | 2012.10.18 |
[android] java.lang.ClassNotFoundException: com.google.android.maps.MapView 해결방법 (0) | 2012.10.18 |
[android] scrollview 안에 mapview 가 있을 때 문제점 & 해결방법 (0) | 2012.10.18 |
댓글