안드로이드/자바
[안드로이드/Android] 카카오톡 이모티콘 선택 뷰 만들기
우늬
2019. 7. 26. 13:03
반응형
카카오톡에서 이모티콘을 보낼 때 키보드 위로 덮이는 뷰를 팝업 윈도우를 사용해서 개발했습니다.
분석
이모티콘 선택할 때 키보드가 나타는 것과 동일하게 채팅 입력창 아래로 나타나며, 키보드가 있는 상태에서는 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();
감사합니다.
반응형