您的位置:首页技术文章
文章详情页

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

浏览:69日期:2024-08-20 08:04:25

问题描述

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

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

问题解答

回答1:

正常方法是没有的, 但是通过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属性的, 因此, 上述调用都只是做了兼容处理保证不崩溃而已.

另外一种思路:

高版本通过设置elevation

低版本通过Background Drawable

p.s.为什么不干脆都用Background Drawable

相关文章: