[EditText] 키보드 닫아 놓고 시작하기

액티비티 생성시에 액티비티에 에딧텍스트가 있으면 포커스가 에딧텍스트로 이동해 버린다. 에딧 텍스트가 포커스를 받았으니 키보드가 열릴 것이다. 이것이 기본 동작이다. 에딧텍스트가 맨 앞의 컴포넌트라면 별 상관 없겠지만 긴 화면의 중간 어디 쯤에 있는 컴포넌트라면 의도와는 다르게 로딩하자마자 스크롤까지 되어 버린다.

이런 때에는 다음의 소스를 적용할 수 있다. 에딧텍스트가 포커스를 받게 된 후에야 키보드가 펼쳐질 것이다. 엔터 키(확인)를 입력 받으면 키패드가 닫힌다.


eText = (EditText) findViewById(R.id.e_text);
if (eText !=null) {
    eText.setText(this.txtValue);
    eText.setInputType(InputType.TYPE_NULL);
    eText.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View v) {
            eText.setInputType(InputType.TYPE_CLASS_TEXT);
            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            imm.showSoftInput(eText, 0);
            eText.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_ENTER) {
                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(editSetValue.getWindowToken(), 0);
                    }
                    return true;
            });
        }
    });
}


또는, 보다 간편한 꼼수로
상위 레이아웃이나 선행 레이아웃의 XML에 다음과 같이 포커스를 설정해준다.

android:focusable="true"
android:focusableInTouchMode="true"

이 블로그의 인기 게시물

좌표 변환: 회전 이동

HTTP POST

Unmappable character for encoding MS949