Android 에서 PopupWindow 가 7.0 이후 에 적합 한 해결 을 자세히 설명 합 니 다.

본 고 는 안 드 로 이 드 에서 PopupWindow 가 7.0 이후 에 적합 한 해결 을 상세 하 게 설명 하고 여러분 에 게 공유 합 니 다.구체 적 으로 다음 과 같 습 니 다.
이곳 은 주로 구 덩이 를 밟 은 경험 을 기록한다.
필요:위의 그림 왼쪽 효과 와 같이 단추 아래 에 PopupWindow 를 연주 하고 싶 습 니 다.네,아주 간단 한 효과 입 니 다.그런데 7.0 이 적당 한 후에 이 PopupWindow 가 이상 하 게 나타 난 것 을 발견 하고 인터넷 에서 다음 과 같은 방안 을 찾 았 습 니 다.

7.0 적합 방안(그러나 7.1 이 다시 재현 되 었 다)

 //  popupWindow   anchor  
 public void showAsDropDown(PopupWindow popupWindow, View anchor) {
  if (Build.VERSION.SDK_INT < 24) {
   popupWindow.showAsDropDown(anchor);
  } else {
   //    android 7.0
   int[] location = new int[2];
   //           
   anchor.getLocationOnScreen(location);
   popupWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, 0, location[1] + anchor.getHeight());
  }
 }
그리고 나 서 나 는 즐 거 웠 다.그리고 나 서 나 는 다른 사람 에 게 popwindow 가 7.0(SDK=24)에 어 울 리 는 문 제 를 알려 주 었 다.그리고 모든 popwindow 가 이렇게 바 뀌 었 다.
어색 한 것 은 7.1(SDK=25)에서 이 문 제 를 다시 재현 해 이상 을 보 였 다 는 것 이다.
최종 해결 방안

if (Build.VERSION.SDK_INT < 24) {
 mPopupWindow = new FixedPopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT,
     ViewGroup.LayoutParams.MATCH_PARENT);
} else {
 int[] location = new int[2];
 //           
 anchor.getLocationOnScreen(location);
 int screenHeight = getScreenHeightPixels(context);
 mPopupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT,
     screenHeight - (location[1] + anchor.getHeight()));
}
초기 화 할 때 동적 으로 높이 를 설정 하여 디 스 플레이 효 과 를 완성 합 니 다.이때 우 리 는 직접 디 스 플레이 를 호출 하면 된다.

mPopupWindow.showAsDropDown(anchor);
작은 사고
프로젝트 에서 PopupWindow 를 공용 할 때 한 번 포장 하고 싶 을 것 입 니 다.PopupWindow 의 초기 화 도 육체 적 인 일이 기 때 문 입 니 다.따라서 이러한 적합 한 방안 을 쇼 As DropDown()방법 에서 직접 실현 할 수 있다.

import android.graphics.Rect;
import android.os.Build;
import android.view.View;
import android.widget.PopupWindow;

/**
 * Created by smart on 2018/5/15.
 */

public class FixedPopupWindow extends PopupWindow {


 public FixedPopupWindow(View contentView, int width, int height){
  super(contentView, width, height);

 }
 .....

 @Override
 public void showAsDropDown(View anchor) {
  if (Build.VERSION.SDK_INT >= 24) {
   Rect rect = new Rect();
   anchor.getGlobalVisibleRect(rect);//              
   int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom; //       anchor   bottom
   setHeight(h);//     PopupWindow  
  }
  super.showAsDropDown(anchor);
 } 
 ... 
}
위의 그런 방안 과 비교 하 다.
4.567917.두 가지 서로 다른 높이 를 계산 하 는 방법모두 PopupWindow 의 높이 설정 을 통 해 이 루어 집 니 다
  • 이런 패 키 지 는 재 활용 코드 를 간소화 할 수 있다
  • 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기