본문 바로가기
프로그래밍/Android

안드로이드 키보드 숨김/보임 처리

by Mr-후 2018. 10. 25.
반응형

안드로이드의 소프트 키보드는 화면에서 사용자 입력을 위한 EditText나 AutoCompleteTextView 등이 포커스를 받는 순간 자동으로 아래에서 올라오는데 자바 코드에서 특정 순간에 키보드를 보이게 하거나 사라지게 할 수 있으며 그 기능을 제공하는 클래스는 InputMethodManager를 이용한다. 


InputMethodManager manager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 


InputMethodManager클래스가 제공하는 showSoftInput() 함수와 hideSoftInputFromWindow()함수를 이용해 보이고/숨김을 처리한다. 

    • showSoftInput(View view, int flags) : 키보드 나타냄
    • hideSoftInputFromWindow(IBinder windowToken, int flags) : 키보드 숨김


if (v == hiddenBtn) {
    manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} else if (v == showBtn) {
    manager = showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}


showSoftInput()함수를 이용해 키보드를 나타낼때, 해당 뷰에 포커스가 없는 상태라면 requestForcus()함수를 이용해 포커스를 요청한 후 showSoftInput() 함수로 키보드가 나타나게 해야 한다. 

editText.requestFocus();
manager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 


위의 두 함수를 이용하는 방법 외에 toggleSoftInput() 함수를 이용하는 것도 가능하다. 

    • toggleSoftInput(int showFlags, int hideFlags); 
manager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 


키보드가 보이면 액티비티가 차지하던 영역에 변화가 생기는데 액티비티를 어떻게 변경할 것인지를 설정해야 한다. (아이폰의 경우 스클롤뷰의  setContentOffSet설정과 비슷한것같다.) 

    • 기본(설정 안된 경우) : adjustUnspecified와 stateUnspecified가 적용 
    • adjustPan: 키보드가 올라올 때 입력 EditText에 맞춰 화면을 위로 올림 
    • adjustResize: 키보드가 올라올 때 액티비티의 크기 조정 
    • adjustUnspecified: 시스템이 알아서 상황에 맞는 옵션 설정 
    • stateHidden: 액티비티 실행시 키보드가 자동으로 올라오는 것 방지
    • stateVisible: 액티비티 실행 시 키보드가 자동으로 올라옴
    • stateUnspecified: 시스템이 적절한 키보드 상태를 설정하거나 테마에 따라 설정 
예) <activity android:name=".MainActivity" android:windowSoftInputMode="adjustPan">

액티비티가 실행되면서 초기에 키보드가 자동으로 올라오게 설정하려면 stateValue을 함께 설정 해준다. 

예) <activity android:name=".MainActivity" android:windowSoftInputMode="adjustPan | stateVisible">




반응형