Notice
Recent Posts
Recent Comments
Link
투케이2K
303. (AndroidStudio/android/java) KeyboardState 가상 키보드 호출 상태 및 높이 사이즈 확인 실시 본문
Android
303. (AndroidStudio/android/java) KeyboardState 가상 키보드 호출 상태 및 높이 사이즈 확인 실시
투케이2K 2022. 6. 14. 17:34[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : java
[KeyboardState : 소스코드]
import android.app.Activity;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.PopupWindow;
public class KeyboardState extends PopupWindow implements ViewTreeObserver.OnGlobalLayoutListener {
// TODO [전역 변수 선언 실시]
private Activity mActivity;
private View rootView;
private HeightListener heightListener;
private int heightMax;
// TODO [클래스 생성자 초기화]
public KeyboardState(Activity activity){
super(activity);
this.mActivity = activity;
rootView = new View(activity);
setContentView(rootView);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
setBackgroundDrawable(new ColorDrawable(0));
setWidth(0);
setHeight(WindowManager.LayoutParams.MATCH_PARENT);
// TODO [AndroidManifest.xml 파일에서 설정한 액티비티 형식]
setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
}
// TODO [init 메소드 정의]
public KeyboardState init(){
if (!isShowing()){
final View view = mActivity.getWindow().getDecorView();
view.post(new Runnable() {
@Override
public void run() {
showAtLocation(view, Gravity.NO_GRAVITY, 0, 0);
}
});
}
return this;
}
// TODO [이벤트 리스너]
public KeyboardState setHeightListener(HeightListener listener){
this.heightListener = listener;
return this;
}
// TODO OnGlobalLayoutListener 메소드
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
rootView.getWindowVisibleDisplayFrame(rect);
if (rect.bottom>heightMax){
heightMax = rect.bottom;
}
int keyboardHeight = heightMax - rect.bottom;
if(heightListener != null){
heightListener.onHeightChanged(keyboardHeight);
}
}
// TODO [인터페이스 정의]
public interface HeightListener {
void onHeightChanged(int height);
}
} // TODO [클래스 종료]
[사용하는 쪽 : 소스코드]
// TODO [액티비티 생명 주기 상태 체크 메소드]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
// [타이틀바 없애기 : FEATURE_NO_TITLE]
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
catch (Exception e){
e.printStackTrace();
}
// [액티비티 레이아웃 지정 실시]
setContentView(R.layout.a_main);
// -----------------------------------------
// TODO [모바일 가상 키보드 호출 및 높이 감지 등록]
new KeyboardState(this).init().setHeightListener(heightListener);
// -----------------------------------------
} // TODO [메인 종료]
// TODO [가상 키보드 이벤트 감지 이벤트 리스너]
KeyboardState.HeightListener heightListener = new KeyboardState.HeightListener() {
@Override
public void onHeightChanged(int height) {
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onHeightChanged() :: 가상 키보드 호출 및 높이 확인]");
Log.i("","\n"+"[height :: "+String.valueOf(height)+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
}
};
[결과 출력]
반응형
'Android' 카테고리의 다른 글
Comments