国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Android - 詳解Android中PopupWindow在7.0后適配的解決

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

2022-02-23 14:51smart_dev Android

本篇文章主要介紹了詳解Android中PopupWindow在7.0后適配的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧

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

這里主要記錄一次踩坑的經(jīng)歷。

需求:如上圖左側(cè)效果,想在按鈕的下方彈一個(gè)PopupWindow。嗯,很簡(jiǎn)單一個(gè)效果,然當(dāng)適配7.0后發(fā)現(xiàn)這個(gè)PopupWindow顯示異常,然后網(wǎng)上找到了下面這種方案。

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

7.0適配方案(但7.1又復(fù)現(xiàn)了)

?
1
2
3
4
5
6
7
8
9
10
11
12
// 將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());
 }
}

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

尷尬的是7.1 (SDK=25)上又復(fù)現(xiàn)了這個(gè)問題,顯示異常。

最終解決方案

?
1
2
3
4
5
6
7
8
9
10
11
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()));
}

在初始化的時(shí)候通過動(dòng)態(tài)設(shè)置高度來(lái)完成顯示效果。此時(shí)我們直接調(diào)用顯示就行了。

?
1
mPopupWindow.showAsDropDown(anchor);

小思考

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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);// 重新設(shè)置PopupWindow高度
  }
  super.showAsDropDown(anchor);
 }
 ...
}

與上面那種方案比較

  1. 兩種不同的計(jì)算高度的方法
  2. 都是通過設(shè)置PopupWindow的高度實(shí)現(xiàn)
  3. 這種封裝可以簡(jiǎn)化重用代碼

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.jianshu.com/p/df010d92f646

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久久久久久久久免费视频 | 色天天综合久久久久综合片 | 日韩一区二区视频 | 国产主播福利 | 一区精品视频 | 日本福利一区二区 | 91精品国产91久久久久久最新 | 国产综合亚洲精品一区二 | 国产精品美女久久久 | 亚洲综合中文字幕在线 | 中文字幕一区二区三区不卡 | 国产四区 | 四虎av成人 | 久久免费视频3 | 国产福利在线观看 | 不用播放器的毛片 | 国产在线一区不卡 | 超碰97免费在线 | 亚洲午夜一区 | 欧美精品一区二 | 中文字幕精品视频 | 99pao成人国产永久免费视频 | 三级黄色片在线免费观看 | 亚洲欧洲av在线 | 激情五月婷婷在线 | 精品一区二区不卡 | 国产成人三区 | av片免费看 | 在线国产一区二区 | 一级一片在线播放在线观看 | 国产精品欧美一区二区 | 午夜视频在线免费观看 | 国产中文字幕在线 | 91一区二区三区 | 天天操天天干天天插 | 久久久久国产精品一区二区 | 日本一区二区高清视频 | 性做久久 | 中文字幕乱码视频32 | 成人av网站在线观看 | 久久精品久久久久久 |