안드로이드 개발 중

어떤어떤 상황에 키보드를 숨기자..라는 경우가 있다


예를 들어 입력창 이외에 빈 화면을 클릭해 주면 키보드가 사라진다던지,

다른 화면으로 이동하면 사라진다던지.


이런 경우에는 아래의 키보드 숨기기 코드를 알맞게 넣어주면 된다


우선 키보드를 숨길 곳에서 import 해준다

import android.view.inputmethod.InputMethodManager;


그리고 인풋매니저를 선언해준다

private InputMethodManager ipm;

꼭 프라이빗일 필요는 없다


생성자에서 객체화해준다

ipm= (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);


이제 사용하면 된다

ipm.hideSoftInputFromWindow(가져갈 화면.getWindowToken(), 0);

여기서 가져갈 화면이란, 클릭한 곳을 넣어주면 된다

만약에 온리섬이나 액티비티 스타트 지점 등 막 시작된 지점에선 위 코드가 제대로 동작하지 않을 수 있다

또는 가져갈 화면이(포커스할 지점)없는 경우도 있다

그럴때는 위 소스 대신

ipm.toggleSoftInput( 0, 0 );

라는 소스를 써줘도 된다


그러니까 키보드가 떠있는데 특정 리니어 레이아웃 구역을 누를시 키보드가 사라지게 하고 싶다면

해당 리니어 레이아웃을 선언한뒤 객체로 만들어서,

해당 객체.setOnTouchListener(new OnTouchListener() { });

이렇게 온터치리스너 따위에다가 위의 코드를 넣어주면 된다


예제

import android.view.inputmethod.InputMethodManager;


private InputMethodManager ipm;

private LinearLayout lin;


ipm= (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

lin = (LinearLayout) findViewById(R.id.lin);


lin.setOnTouchListener(new OnTouchListener() {


ipm.hideSoftInputFromWindow(lin.getWindowToken(), 0);

//또는(위 코드가 동작하지 않는 곳이나 마땅히 포커스할 lin이없는 경우에는

//ipm.toggleSoftInput( 0, 0 );

//하지만 토글소프트 인풋의 경우, 키보드를 무조건 사라지게 하는게 아니라

//현재 상태의 반대로 만든다, 그러므로 무조건 사라지게 하고 싶다면 위 코드를 쓸것


});


이렇게 했는데 안되는 경우가 있다.

바로 온 크리에이트,리섬,스톱 중에 넣어주는 경우인데, 이럴때는 약간의 딜레이를 줘야 한다

   Timer timer = new Timer();

   timer.schedule(new TimerTask() {

       @Override

       public void run() {

           ipm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

           ipm.hideSoftInputFromWindow(포커스를줄객체명.getWindowToken(), 0);

            }

       }, 100);



자마린 - fragment OncreateView내에서 사용시 (InputMethodManager는 import해줘야함)

InputMethodManager manager = (InputMethodManager)this.Activity.GetSystemService(Context.InputMethodService);


rlayout.Touch += (s, e) => { manager.HideSoftInputFromWindow(rlayout.WindowToken, 0); };


그외상황

http://stackoverflow.com/questions/14991071/hide-keyboard-programmatically-in-monodroid





자마린- 메소드로 편하게 쓰기


1. 키보드 숨기기 메소드 추가

public void HideKeyboard(View view) {

   InputMethodManager manager = (InputMethodManager)GetSystemService(Activity.InputMethodService);

   manager.HideSoftInputFromWindow(view.WindowToken, 0);

}


mainLayout.Touch += (s, e) => { HideKeyboard((LinearLayout)s); };



Posted by 안드로메다에서 온 프로그래머