본문 바로가기

Android

EditText에서 google keyoboard visible 상태일때 하드 Back Key 제어

에디트텍스트를 클릭시 배경을 불투명하게 조정하고 키보드가 같이 뜨게 구현했다.

이때 하드웨어 Back Key를 누르면 에디트텍스트는 살아있고 불투명 배경을 원래대로 변경하고 키보드가 내려가

도록 구현하는데 마켓에서 받은 키보드들은 해당 에디트텍스트에 OnKeyListener를 등록하면 리스너를 통해 처

리가되었는데 기본 구글키보드일때만 위의 리스너를 타지않고 배경은 불투명인 상태로 키보드만 사라지는 문제

가 있었다. 

Listener란 Listener는 다 검색해보고 적용해봤으나 아무리해도 해당 리스너에 접근 되지 않아 열심히 구글링 중 

에디트 텍스트를 커스터마이징한뒤 onKeyPreIme 함수를 오버라이드 해서 사용하면 된다고 하여 이렇게 저렇게 

수정하다 결국 수정했다 -_-;


우선 에디트텍스트를 생성하고 호출하는 액티비티에 onKeyPreIme 함수를 오버라이드한다.

1
2
3
4
5
6
7
8
9
10
11
12
//examActivity

public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN) {
	    if(mInputMethodManager.isActive()){
		if(keyCode == KeyEvent.KEYCODE_BACK) {
		      //BackKey 입력시 적용될 로직.
				}
			 }
		  }
		  return true;
	}

그리고 위의 오버라이드한 함수를 사용할 에디트텍스트를 커스터마이징 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//커스터마이징 클래스
import examActivity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.EditText;

public class ExEditText extends EditText {
	
    public ExEditText(Context a_context) {
	 super(a_context);
	}
    public ExEditText(Context a_context, AttributeSet a_attributeSet) {
         super(a_context, a_attributeSet); 
	}
    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
      if(((examActivity)getContext()).onKeyPreIme(keyCode,event)){
	    return true;
           }
          return super.onKeyPreIme(keyCode, event); 
        }
}

= 클래스를 보면 우선 해당 EditText를 사용할 액티비티 클래스를 import 한다. 

  그리고 onKeyPreIme함수를 오버라이드하고 이때 사용할 액티비티의 context를 가져오는 구문을 추가해준다.

마지막으로 Layout XML 에서 사용할 에디트텍스트에 바로 위에 생성한 클래스 경로를 넣어준다.

1
2
3
4
5
6
 <패키지명.ExEditText
            android:id="@+id/editName"
            android:layout_width="280px"
            android:layout_height="43px"
            android:maxLength="10"
            android:textSize="16dp" />

이제 빌드 후 에디트텍스트를 활성화하고 키보드를 띄운 상태에서 하드웨어 BackKey를 누르면 액티비티안에 있

는 onKeyPreIme 함수를 타게 된다.ㅎㅎ

앞으로 얼마나 써먹을진 모르지만 어제 오늘 눈빠지게 써칭해서 해결했으니 일단 적어뒀다!