android - popupWindow.setElevation()怎樣兼容到API21以下呢
問題描述
項目里有個地方用到了PopupWindow的setElevation() 但是這個方法只支持API21以上,我看有個PopupWindowCompat,但是里面好像沒有什么有用的方法,請問應該如何兼容API21以下的版本呢
問題解答
回答1:正常方法是沒有的, 但是通過Java反射還是能實現(xiàn)的, 只是實現(xiàn)了, 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, 然后調(diào)用ViewCompat.setElevation(View, float)就算完成工作了. 但是由于低版本是沒有elevation屬性的, 因此, 上述調(diào)用都只是做了兼容處理保證不崩潰而已.
另外一種思路:
高版本通過設置elevation
低版本通過Background Drawable
p.s.為什么不干脆都用Background Drawable
相關文章:
1. centos - apache配置django報錯:cannot be loaded as Python modules2. javascript - 微信小程序里怎么把頁面轉(zhuǎn)成圖片分享3. 【python小白】 問關于property的順序問題4. node.js - 有沒有比較好的nodejs導出excel的插件?5. 微信端電子書翻頁效果6. mysql - SQL問個基礎例子,書上的,我怎么看都看不懂..誰幫我解釋一下第2個為什么和第1個一樣?7. mysql服務無法啟動1067錯誤,誰知道正確的解決方法?8. mysql事務日志的一些問題9. mysql - 我用SQL語句 更新 行的時候,發(fā)現(xiàn)全部 中文都被清空了,請問怎么解決?10. 數(shù)據(jù)庫 - mysql boolean型無法插入true
