2017-02-01 17 views
2

Это связано с этим вопрос: Android Nougat PopupWindow showAsDropDown(...) Gravity not workingAndroid Нуга 7.1.1 showAtLocation (...) Гравитация не работает

Однако, когда я применил это исправление:

if (android.os.Build.VERSION.SDK_INT >=24) { 
    int[] a = new int[2]; 
    anchorView.getLocationInWindow(a); 
    popUp.showAtLocation(((Activity) mContext).getWindow().getDecorView(), Gravity.NO_GRAVITY, 0 , a[1]+anchorView.getHeight()); 
} else{ 
    popUp.showAsDropDown(anchorView); 
} 

Это не работает на Android Nougat 7.1.1. В частности, на устройствах Google Pixel и Nexus 6p.

У кого-нибудь есть исправление для этого? Поделись, пожалуйста. https://code.google.com/p/android/issues/detail?id=231487

+0

Вы нашли обходное решение для этого? Если нет, я написал здесь отчет об ошибке: https://code.google.com/p/android/issues/detail?id=233237 –

ответ

3

При изменении высоты PopupWindow от WindowManager.LayoutParams.MATCH_PARENT до WindowManager.LayoutParams.WRAP_CONTENT, он работает на Android 7.1, я не знаю причины, но, возможно, вы можете попробовать его.

Кроме того, вы должны изменить свой код:

if (android.os.Build.VERSION.SDK_INT == 24) { 
    int[] a = new int[2]; 
    anchorView.getLocationInWindow(a); 
    popUp.showAtLocation(((Activity)mContext).getWindow().getDecorView(), Gravity.NO_GRAVITY, 0 , a[1]+anchorView.getHeight()); 
} else{ 
    popUp.showAsDropDown(anchorView); 
} 
+0

Это не работа для нас. Мое устройство - Nexus 5x Android 7.1.1 – Jimson

0

Я установил, мой нексус 5 7.1.1 alread имеет ошибку. пример кода:

View rootView = anchor.getRootView(); 
    Rect rect = new Rect(); 
    rootView.getWindowVisibleDisplayFrame(rect); 

    int[] xy = new int[2]; 
    anchor.getLocationInWindow(xy); 
    int anchorY = xy[1] + anchor.getHeight(); 

    int height = rect.bottom - anchorY; 

    PopupWindow poupWindow = new PopupWindow(frameLayout, ViewGroup.LayoutParams.MATCH_PARENT, height); 
    poupWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, 0, anchorY);  
0
public void showFilterWindow(Context context, PopupWindow popupWindow,View showView, int xoff, int yoff) { 
    if (Build.VERSION.SDK_INT < 24) { 
     //7.0 The following system is used normally 
     popupWindow.showAsDropDown(showView, xoff, yoff); 
    } else { 
     int[] location = new int[2]; 
     showView.getLocationOnScreen(location); 
     int offsetY = location[1] + showView.getHeight() + yoff; 
     if (Build.VERSION.SDK_INT == 25) { 
      //【note!】Gets the screen height without the virtual key 
      WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
      int screenHeight = wm.getDefaultDisplay().getHeight(); 
      /* 
      * PopupWindow height for match_parent, 
      * will occupy the entire screen, it needs to do special treatment in Android 7.1 
      */ 
      popupWindow.setHeight(screenHeight - offsetY); 
     } 
     //Use showAtLocation to display pop-up windows 
     popupWindow.showAtLocation(showView, Gravity.NO_GRAVITY, 0, offsetY); 
    } 
} 

Reference https://stackoverflow.com/a/43873648/4776543 исправить некоторые ошибки.

 Смежные вопросы

  • Нет связанных вопросов^_^