반응형
카카오톡에서 이모티콘을 보낼 때 키보드 위로 덮이는 뷰를 팝업 윈도우를 사용해서 개발했습니다.
분석
이모티콘 선택할 때 키보드가 나타는 것과 동일하게 채팅 입력창 아래로 나타나며, 키보드가 있는 상태에서는 overlay 되는 구조입니다. 키보드와 같은 높이를 갖고 있어 자연스럽게 show/hide 합니다.
키보드 높이는 키보드가 나타나기 전에는 알 수 없어 default로 비슷한 값인 350dp로 설정하고, 키보드가 나타났을 때 그 높이를 측정해 사용합니다.
구현
Init
View popupView = getLayoutInflater().inflate(R.layout.view_keyboard, null);
PopupWindow popupWindow = new PopupWindow(popupView,
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setAnimationStyle(0);
setAnimationStyle은 팝업이 나타날 때 애니메이션 설정으로, defalut는 -1 입니다.
- 0은 no animation
show
if (keyboardHeight < 200) {
// 키보드가 노출된적 없을때
height = ConvertSize.dp2pixel(350, this);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) getBinding().spInput.getLayoutParams();
params.height = height;
getBinding().spInput.setLayoutParams(params);
getBinding().spInput.requestLayout();
} else {
// 키보드가 한번이라도 노출된 경우
height = keyboardHeight;
}
popupWindow.setHeight(height);
popupWindow.showAtLocation(getBinding().rlMain, Gravity.BOTTOM, 0, getBinding().editTextInput.getHeight());
팝업 윈도우는 말 그대로 뷰 위에 띄우는 구조다 보니깐 입력창 아래 Space View(spInput)를 두고 높이를 변경해 입력창 아래 팝업 윈도우가 뜬 것처럼 구현했습니다.
showAtLocation(View parent, int gravity, int x , int y)
- parent : 팝업 윈도우를 띄울 부모 뷰
- gravity : 팝업 윈도우의 위치
- x : 좌표
- y : 좌표
hide
if (keyboardHeight < 200) {
// 키보드가 노출된적 없을때
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) getBinding().spInput.getLayoutParams();
params.height = 0;
getBinding().spInput.setLayoutParams(params);
getBinding().spInput.requestLayout();
}
popupWindow.dismiss();
감사합니다.
반응형
'안드로이드 > 자바' 카테고리의 다른 글
[Android] 외국인 대상 광고 플랫폼 - MoPub 배너 (3) | 2021.03.22 |
---|---|
Remote Config를 사용해서 서버 없이 업데이트 버전을 체크하자 : 안드로이드 (0) | 2020.07.22 |
[안드로이드/Android] 64bit 대응 (0) | 2019.07.19 |
[안드로이드/Android] 카카오 지도 연동하기 (1) | 2019.05.17 |
[안드로이드/Android] QR코드 리더기 만들기 (1) | 2019.04.04 |