搜尋

首頁  >  問答  >  主體

android - popupWindow.setElevation()怎样兼容到API21以下呢

项目里有个地方用到了PopupWindowsetElevation() 但是这个方法只支持API21以上,我看有个PopupWindowCompat,但是里面好像没有什么有用的方法,请问应该如何兼容API21以下的版本呢

黄舟黄舟2767 天前620

全部回覆(1)我來回復

  • 怪我咯

    怪我咯2017-04-18 09:16:05

    正常方法是沒有的, 但是透過Java反射還是能實現的, 只是實現了, elevation的效果也是出不來的. 先看看Android源碼:

    public class PopupWindow {
        ... ...
        private View mBackgroundView;
    
        public void setElevation(float elevation) {
            mElevation = elevation;
        }
    
        private void preparePopup(WindowManager.LayoutParams p) {
            ... ...
            // The background owner should be elevated so that it casts a shadow.
            mBackgroundView.setElevation(mElevation);
        }
    }

    從上面的程式碼, 可以知道只要透過反射獲取到mBackgroundView, 然后调用ViewCompat.setElevation(View, float)就算完成工作了. 但是由於低版本是沒有elevation屬性的, 因此, 上述調用都只是做了兼容處理保證不崩潰而已.

    另外一種思路:

    1. 高版本透過設定elevation

    2. 低版本透過Background Drawable

    p.s.為什麼不乾脆都用Background Drawable

    回覆
    0
  • 取消回覆