가상 키보드를 강제로 보이게 하고 또 안보이게 하는 방법입니다.

InputMethodManager imm;

@Override
public void onCreate(Bundle icicle) {
TimerTask myTask = new TimerTask(){
public void run(){
imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.showSoftInput(getCurrentFocus(), InputMethodManager.SHOW_FORCED);
}
};
Timer timer = new Timer();
timer.schedule(myTask, 500);


@Override
protected void onPause() {
super.onPause(); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}

위의 액티비티가 포어그라운드로 실행될 때 InputMethodService 의 참조를 얻어서 가상 키패드를 보여주는 메소드를 차례로 호출하고 있습니다. 그리고 위 액티비티가 백그라운드로 실행되면 onPouse를 내에 가상 키패드를 감추는 메소드를 호출하게 되어있습니다.

어려운 것은 없지만 왜 타이머 안에 구현되어 있느냐가 중요합니다.
 기본적으로 키보드는 OS 단에서 지원되는 것이기때문에 아무곳에나 붙이기는 어렵습니다. 그리고 액티비티 생성시 바로 호출하게되면 뜨지 않습니다.(제 생각엔, 아마 내부적으로 onCreate 작업의 막바지거나 끝나고 수행되는듯 합니다.) 그래서 타이머나 핸들러로 약간의 딜레이 주는 작업이 불가피합니다.


Posted by 빈솔B
,