안드로이드 개발 중
어떤어떤 상황에 키보드를 숨기자..라는 경우가 있다
예를 들어 입력창 이외에 빈 화면을 클릭해 주면 키보드가 사라진다던지,
다른 화면으로 이동하면 사라진다던지.
이런 경우에는 아래의 키보드 숨기기 코드를 알맞게 넣어주면 된다
우선 키보드를 숨길 곳에서 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); };
'개발자 > Android' 카테고리의 다른 글
Xamarin.Android - 익명 클래스 (0) | 2015.07.07 |
---|---|
Xamarin.Android - Manifests, Button, Dialog (0) | 2015.04.03 |
비트맵과 함께 춤을 (feat.Crop&Rote&Save) (0) | 2015.03.21 |
안드로이드 키보드(키패드)숨기기 / 자마린 버전도 추가 (0) | 2013.08.05 |
커스텀 리스트뷰 (listview) 새로고침(갱신) (2) | 2013.08.01 |
안드로이드 TextView 에 ScrollView없이 스크롤 넣기,스크롤뷰 안에 스크롤 넣기 (0) | 2013.07.30 |
댓글을 달아 주세요