国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android中PopupWindow在7.0后適配的解決

2019-10-22 18:10:53
字體:
來源:轉載
供稿:網友

本文介紹了詳解Android中PopupWindow在7.0后適配的解決,分享給大家,具體如下:

這里主要記錄一次踩坑的經歷。

需求:如上圖左側效果,想在按鈕的下方彈一個PopupWindow。嗯,很簡單一個效果,然當適配7.0后發現這個PopupWindow顯示異常,然后網上找到了下面這種方案。

Android7.0,PopupWindow適配,PopupWindow

7.0適配方案(但7.1又復現了)

 // 將popupWindow顯示在anchor下方 public void showAsDropDown(PopupWindow popupWindow, View anchor) {  if (Build.VERSION.SDK_INT < 24) {   popupWindow.showAsDropDown(anchor);  } else {   // 適配 android 7.0   int[] location = new int[2];   // 獲取控件在屏幕的位置   anchor.getLocationOnScreen(location);   popupWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, 0, location[1] + anchor.getHeight());  } }

然后我那個開心啊,然后我就告訴其他人popwindow 在7.0 (SDK=24)適配的問題,然后所有popwindow都這么更改了。

尷尬的是7.1 (SDK=25)上又復現了這個問題,顯示異常。

最終解決方案

if (Build.VERSION.SDK_INT < 24) { mPopupWindow = new FixedPopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT,     ViewGroup.LayoutParams.MATCH_PARENT);} else { int[] location = new int[2]; // 獲取控件在屏幕的位置 anchor.getLocationOnScreen(location); int screenHeight = getScreenHeightPixels(context); mPopupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT,     screenHeight - (location[1] + anchor.getHeight()));}

在初始化的時候通過動態設置高度來完成顯示效果。此時我們直接調用顯示就行了。

mPopupWindow.showAsDropDown(anchor);

小思考

當項目中公用PopupWindow的時候,你一定想著封裝一次,畢竟PopupWindow的初始化也是一個體力活。于是,可以將這種適配方案直接在showAsDropDown()方法中實現。

import android.graphics.Rect;import android.os.Build;import android.view.View;import android.widget.PopupWindow;/** * Created by smart on 2018/5/15. */public class FixedPopupWindow extends PopupWindow { public FixedPopupWindow(View contentView, int width, int height){  super(contentView, width, height); } ..... @Override public void showAsDropDown(View anchor) {  if (Build.VERSION.SDK_INT >= 24) {   Rect rect = new Rect();   anchor.getGlobalVisibleRect(rect);// 以屏幕 左上角 為參考系的   int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom; //屏幕高度減去 anchor 的 bottom   setHeight(h);// 重新設置PopupWindow高度  }  super.showAsDropDown(anchor); }  ... }

與上面那種方案比較

  1. 兩種不同的計算高度的方法
  2. 都是通過設置PopupWindow的高度實現
  3. 這種封裝可以簡化重用代碼

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖州市| 大邑县| 布拖县| 牟定县| 酉阳| 娄烦县| 河池市| 宜兰市| 环江| 海淀区| 临沭县| 镇巴县| 克拉玛依市| 绥阳县| 油尖旺区| 子长县| 连云港市| 佛山市| 高碑店市| 重庆市| 叙永县| 宣城市| 庐江县| 政和县| 广平县| 娄底市| 乌兰县| 静安区| 嘉荫县| 师宗县| 新津县| 阿瓦提县| 务川| 兰溪市| 阿克| 英吉沙县| 大埔县| 龙口市| 鸡泽县| 合肥市| 大关县|