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. dockerfile - [docker build image失败- npm install]2. java - mybatis怎么实现在数据库中有就修改,没有就添加3. docker安装后出现Cannot connect to the Docker daemon.4. docker gitlab 如何git clone?5. javascript - webpack 多入口文件生成HTML文件;6. node.js - mongoDB使用$gte的问题7. nignx - docker内nginx 80端口被占用8. java中关于直接插入排序遇到的问题。9. javascript - npm run build后调用api返回index.html10. docker绑定了nginx端口 外部访问不到
