Android 關於導航欄(虛擬按鍵)遮擋PopupWindow底部布局的問題


 

我們自定義popupWindow的時候,一般會設置這些參數

setContentView(contentView);
//設置高度為屏幕高度 setWidth(UIUtils.getScreenHeight(context)); //設置寬度為屏幕寬度 setHeight(UIUtils.getScreenWidth(context)); setFocusable(true); //dismiss時將背景透明度恢復為1f setOnDismissListener(()-> modifyActivityAlpha(1f)); setBackgroundDrawable(new BitmapDrawable()); setAnimationStyle(R.style.action_sheet_no_animation); //將透明度alpha值設為0.5f modifyActivityAlpha(0.5f); //在底部展示 showAtLocation(context.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0); 
//改變背景透明度 private void modifyActivityAlpha(float alpha) { WindowManager.LayoutParams params = context.getWindow().getAttributes(); params.alpha = alpha; context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); context.getWindow().setAttributes(params); } 
關於獲取屏幕的寬高可以查看我的這篇文章:https://www.jianshu.com/p/cbba19018f5d

在魅族的手機(沒有底部導航欄)上很開心很愉快的運行着,但是當我看到華為手機(有底部虛擬按鈕)的顯示結果時我是很頭疼的,popupWindow有一部分布局被虛擬按鈕遮擋了。

圖一(可以看到底部滑不上去,一部分被遮擋了。)
 
one.png
  • 在經過一番google后發現大家一致推薦的解決方案,在參數設置中加上
setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
  • 滿懷期待的等待着運行的結果,但是發現並沒有解決問題,我開始思考哪里出問題了。
    后來發現是寬高設置的問題,我把寬高的設置改為:
setWidth(WindowManager.LayoutParams.MATCH_PARENT); setHeight(WindowManager.LayoutParams.MATCH_PARENT); 
  • 因為之前設置的是屏幕的寬高,是把虛擬按鍵的高度算在內的。
  • 終於解決了有虛擬按鍵時全屏的popupWindow出現的遮擋問題。
圖二(問題解決)
 
image.png
下面是最終的部分代碼
 public void init(View contentView, View layoutContent) { setContentView(contentView); setWidth(WindowManager.LayoutParams.MATCH_PARENT); setHeight(WindowManager.LayoutParams.MATCH_PARENT); setFocusable(true); setOnDismissListener(()-> modifyActivityAlpha(1f)); setBackgroundDrawable(new BitmapDrawable()); setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); setAnimationStyle(R.style.action_sheet_no_animation); modifyActivityAlpha(0.5f); showAtLocation(context.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0); } 

補充:在測試中僅僅使用了6.0的手機,有博主指出在7.0以上手機上會出現無效的問題,大家可以參考:http://blog.csdn.net/qinyunying/article/details/55051193
如果解決了你的問題,希望能給個👍哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM