2013-05-29 4 views
14

Android 용 응용 프로그램을 개발 중이며 사용자가 화면 하단의 특정 메뉴 막대 객체 (수평으로 줄이는 작은 이미지로 구성됨)를 클릭하면 팝업 창이 나타납니다.특정보기 위의 Android - PopupWindow

클릭시 팝업창이 클릭되어 맨 위에 표시되는보기의 왼쪽 상단 모서리에 고정되기를 원합니다. 중요한 것으로 보인다

유일한 방법 showAsDropDown (보기 앵커 INT XOFF, INT yoff)showAtLocation (보기 부모 INT 중력, INT (X), (Y)의 INT)이다. showAsDropDown의 문제점은보기의 왼쪽 하단 모서리에 고정된다는 것입니다.

다른 방법으로 구현할 수 있습니까?

답변

25

popupWindow.showAtLocation(...)이 일이 일이 실제로 절대적으로 화면 (심지어 응용 프로그램)에 위치 창을 보여줍니다. 해당 호출의 앵커는 창 토큰에 대해서만 사용됩니다. 좌표는 주어진 중력의 오프셋입니다.

당신이 실제로 사용하려는 것은 :

popupWindow.showAsDropdown(anchor, offsetX, offsetY); 

이러한 호출 팝업을 보여 사용해야하는 이전 버전의 있도록

popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity); 

이 호출은, API 19+에서만 사용할 수 있습니다 지정된 앵커 뷰를 기준으로 한 윈도우입니다. 기본 중력 (특정 중력없이 호출 할 때)은 Gravity.TOP|Gravity.START이므로 앱의 여러 지점에서 명시 적으로 Gravity.LEFT을 사용하면 나쁜 시간을 갖습니다. :)

+1

그게 내가 찾고 있었던거야. 계산할 필요가있는 것은 ui 요소에 따른 오프셋입니다. – Alpaslan

5

사용하려는 사람은 showAtLocation(...)입니다. 앵커 뷰 (사용자가 클릭하는 뷰)를 지정하고 gravity 매개 변수와 오프셋을 통해 상대적 뷰를 배치합니다. PopupWindow과 같은 매개 변수가 자식보기와 거의 같고 부모보기가 컨테이너 레이아웃과 같다고 생각하면 gravity 매개 변수를 생각해보십시오.

매개 변수로 Gravity.LEFT | Gravity.TOP을 입력 할 수 있어야합니다.

+7

PopupWindow는 해당 행 (popupWindow.showAsLocation (anchor, Gravity.TOP | Gravity.LEFT, 0, 0))이있는 윈도우의 왼쪽 위 모서리를 표시합니다. –

1

popupwindow.showAsDropDown (anchor, 0, -125); 나

6
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight()); 
3

팝업 창을 높이만큼 이동해야했습니다. 앵커는 yoff 매개 변수를 사용하여 showAsDropDown (앵커보기, int xoff, int yoff보기) 구문을 사용합니다.

popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight); 

또한 앵커 허용 최대 높이가 변환을 허용하지 않으면 팝업이 제대로 표시되지 않을 수 있습니다.

+0

이 코드가 질문에 어떻게 대답하는지 자세히 설명하십시오 (이 답변은 저품결 게시물 검토 대기열에 있음). – JAL

3

나는이 코드를 가지고 있습니다 : 모든 sdk 버전의 특정보기 (중력 끝) 아래의 팝업 창. 여기

 // display the popup[![enter image description here][1]][1] 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END); 
     } else { 
      mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0); 
     } 

보기 V를하여 ImageButton 달력입니다.