android - popupWindow.setElevation()怎样兼容到API21以下呢
问题描述
项目里有个地方用到了PopupWindow的setElevation() 但是这个方法只支持API21以上,我看有个PopupWindowCompat,但是里面好像没有什么有用的方法,请问应该如何兼容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
相关文章:
1. 老哥们求助啊2. pycharm运行python3.6突然出现R6034问题,请问如何处理?3. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?4. phpadmin的数据库,可以设置自动变化时间的变量吗?就是不需要接收时间数据,自动变化5. APP上传到电脑服务器,出现数据上传不完整的问题6. mysql - thinkphp5 在MAC电脑本地正常,部署LINUX服务器之后,模型不存在7. python执行cmd命令,怎么让他执行类似Ctrl+C效果将其结束命令?8. 想找个php大神仿个网站。9. PHP类封装的插入数据,总是插入不成功,返回false;10. 这是什么情况???
