마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

popupview 질문 좀 드릴께요.

0 추천

옆에서 나오는 메뉴를 만들기위해서

popupview 를 생성했습니다.

화면사이즈만큼의 높이로 된 xml을 메뉴로 사용하였습니다.(R.id.xxxx)

View popupView = ((LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.id.xxxx, null);
PopupWindow sliderPannel = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
sliderPannel.setAnimationStyle(-1);
sliderPannel.showAtLocation(parentLayout, Gravity.NO_GRAVITY, 0, 0);
 
그런데 문제는 이렇게 생성시, 창이 화면 최상단이 아닌 상태바(배터리, 시간등이 표시되는)부터 시작되네요.
 
임의로 y좌표를 상태바 크기만큼 줄수도있지만 다른 방법은 없을까요?
 
Dialog 를 사용하였을땐 상태바를 제외한 위치부터 그려지네요.
 
일단 편법으로 메뉴xml에 화면 갱신을 유도하기위하여 의미없는 listview를 추가하여 쓰고있는데요..
 
아무리 생각해도 이방법은 아닌듯하네요.
 
도와주세요..

 

왕초심자 (350 포인트) 님이 2014년 4월 30일 질문

1개의 답변

+1 추천

showAtLocation 의 입력 파라메터 중 Gravity.NO_GRAVITY로 해 두셨는데 이 값으로 넣어야만 하는 이유가 있나요?

아니라면 이 값을 조정원하는 Gravity로 바꾸시면 거기에 맞춰 나올 겁니다.

사악미소 (65,330 포인트) 님이 2014년 4월 30일 답변
지금 fill_vertical, top 등으로 해봤는데도.. 마찬가지로
상태바를 잡아먹습니다. 특별한 gravity가 있나요?
특별한건 없고 http://developer.android.com/reference/android/view/Gravity.html 값을 그냥 사용하시면 될 듯 한데.
특히 showAtLocation 가이드 보시면
Specifying a gravity of NO_GRAVITY is similar to specifying Gravity.LEFT | Gravity.TOP 라 되어 있습니다.  다른 값으로 변경해보세요./
어떠한 gravity로 써도..
y좌표의 기준이 화면 최상단이 되네요.
상태바 아래가 0 이 아니라.. 상태바까지 포함한 상단이 0 으로 나와버리네요 ㅜㅜ 어쩔수 없이 화면을 옮겨야 하는 것인가요...
흠 변경이 안되었다면, 레이아웃이 MATCH_PARENT 라서 조정이 안되는 것일수도 있습니다. 확인이 쉽게 Gravity.CENTER로 두신 후
 PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 부분의 입력값을LayoutParams.WRAP_CONTENT 로 해보시고 R.id.xxxx 쪽 레이아웃에 MATCH_PARENT로 되어 있는 부분이 있는지 확인 해보세요.
음.. pupupwindiw는  match_parent로 하면 상태바까지 잡히나요?
그런데 지금 wrap_content 로 하고 R.id.xxxx 레이아웃에 match_parent 로 되어있는것을 수치로 바꾸었습니다. 360dp/640dp
(최상단 레이아웃 수치를 match_parent -> 사이즈를 지정)
그런데 그래도 마찬가지네요. ㅜㅜ

popupwindow가 기본적으로 상태바까지 포함한 맨위에서 시작하는것인가요? 아니면 제 layout이 화면 위쪽으로 밀려올라간 것일까요?
...