PopupWindow 전체 화면 표시

먼저 레이아웃 파일 을 지정 합 니 다.루트 레이아웃 에서 사용 하 는 너비 가 가장 큽 니 다.다음 과 같 습 니 다.
layout.xml


    ...
 

생 성 할 곳 에 레이아웃 과 PopupWindow 를 예화 한 다음 표시 합 니 다.
View layout = getLayoutInflater().inflate(R.layout.layout, null);
final PopupWindow pop = new PopupWindow(layout, 
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        true);
pop.setBackgroundDrawable(new ColorDrawable(0xffffff));//    Back     
pop.showAtLocation(findViewById(R.id.title), Gravity.NO_GRAVITY, 0, 0); 

팝 업 윈도 가 전체 화면 에 딱 나타 날 것 으로 기대 되 는데,실제로 상단 이 알림 표시 줄 에 가 려 져 있 는 것 을 발견 했다.
그리고 알림 표시 줄 높이 를 가 져 옵 니 다.Y 축 에서 알림 표시 줄 높이 를 이동 하면 됩 니 다.
	/**
	 *          
	 * @param activity
	 * @return
	 */
	public static int getStatusBarHeight(Activity activity) {
		Rect frame = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
		Log.d(TAG, "statusBarHeight:"+frame.top+"px");
		return frame.top;
	}
pop.showAtLocation(findViewById(R.id.title), Gravity.NO_GRAVITY, 0, getStatusBarHeight(this));

테스트 결과 SDK 4.4 에서 먼저 양호 한 것 으로 나 타 났 으 며 4.1,4.2 에 서 는 여전히 알림 표시 줄 에 가 려 져 있 었 다.
SDK 소스 코드 API 16 과 19 의 쇼 AtLocation 의 차이 점 이 의외로 발견 되 었 습 니 다.
Gravity.NOGRAVITY 를 Gravity.TOP|Gravity.START 로 바 꾸 면 현상 은 여전 하 다.
나중에 실험 을 했 어 요.
popupWindow.setClippingEnabled(false)가 해결 되 었 습 니 다.
공식 문 서 는 이렇게 설명 한다.
    PoupupWindow showAtLocation 
  API 19:
        if (gravity == Gravity.NO_GRAVITY) {
            gravity = Gravity.TOP | Gravity.START;
        }
  API 16:
        if (gravity == Gravity.NO_GRAVITY) {
            gravity = Gravity.TOP | Gravity.LEFT;
        }

팝 업 창 이 화면 범 위 를 초과 하도록 허용 합 니 다.기본적으로 창 이 화면 경계 에 끼 워 집 니 다.false 로 설정 하면 윈도 우 를 정확하게 찾 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기