안드로이드에서 Floating Window를 최상단에 띄워놓은 상태에서 키보드가 표시되면 Floating Window가 이를 인지해서 키보드를 가리지 않거나 Layout을 변경하도록 하기 위한 방법입니다.
Floating Window를 Window Manager에 추가할 때 아래와 같이 Layout 파라메터를 입력하시면 됩니다.
:
:
params= new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
preview.setBackgroundColor(Color.RED);
params.gravity = Gravity.LEFT;
params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; //가장 중요한 플래그 입니다
preview.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.d("GUNMAN", "SOMETHING HAPPENDED"); //키보드가 표시되거나 사라질때 발생하는 이벤트 입니다.
// View draw, do Sth
int height = preview.getMeasuredHeight(); // View의 높이가 바뀌어 있습니다.
}
});
getWindowManager().addView(preview, params);