我们自定义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
如果解决了你的问题,希望能给个

Android 关于导航栏(虚拟按键)遮挡PopupWindow底部布局的问题的更多相关文章

  1. Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar

    场景分析, 为了完全实现沉浸式效果,在进入特定的app后可以将导航栏移除,当退出app后再次将导航栏恢复.(下面将采用发送广播的方式来移除和恢复导航栏) ps:不修改源码的情况下,简单的沉浸式效果实现 ...

  2. 安卓ROOT后禁用/隐藏导航栏/虚拟按键

    安卓ROOT后禁用/隐藏导航栏/虚拟按键 提醒:提前装好EASY TOUCH 等类似工具. 用ROOT EXPLORER 或 ROOT BROWSER system\bulid.prop 最后加一行: ...

  3. android通讯录导航栏源码(一)

    通讯录导航栏源码: 1.activity package com.anna.contact.activity; import java.util.ArrayList; import java.util ...

  4. Android官方导航栏ActionBar(二)—— Action View、Action Provider、Navigation Tabs的详细用法

    在上一篇文章(Android之官方导航栏ActionBar)中,我们介绍了ActionBar各组成部分的基本应用.ActionBar除了提供Action Buttons外,还提供了多种导航方式如 Ac ...

  5. 【Android】导航栏(加图片icon)和不同页面的实现(viewpager+tablayout)

    先上图,然后说大致步骤,最后再说细节 图片效果:依序点击导航栏左一.左二.中.右二.右一,最后直接滑动页面(不依靠导航栏切换) 大致步骤如下(文末会有完整代码) [1]创建一个类,我这里取名TabBa ...

  6. Android BottomNavigationBar导航栏

    基本属性 setActiveColor //选中item的字体颜色 setInActiveColor //未选中Item中的颜色 setBarBackgroundColor//背景颜色 setMode ...

  7. android监听虚拟按键的显示与隐藏【转】

    本文转载自:http://blog.csdn.net/u014583590/article/details/55263141 虚拟按键在华为手机中大量存在,而虚拟按键的存在无疑增加了屏幕适配的难度,往 ...

  8. NavUtils【底部虚拟导航栏工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 获取底部虚拟导航栏的高度值 效果图 代码分析 checkDeviceHasNavigationBar(Context context ...

  9. Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)

    通过前几篇文章,我们对Android的导航栏有了一定的了解认识,本次文章将对Toolbar进行综合应用,主要结合DrawerLayout.ViewPager.PagerSlidingTabStrip一 ...

随机推荐

  1. 用Jetty 9.1运行Java WebSockets微服务

    Jetty 9.1的发布将Java WebSockets (JSR-356) 带入了非Java EE环境,从而开启了微服务时代.我们可以将Jetty的容器包含在java应用程序中(注意,不是Java代 ...

  2. php获取当前时间的方法

    1.获取当前时间 date('Y-m-d H:i:s', time())   2.字符串转时间 date('Y-m-d H:i:s',strtotime('2018-8-21 22:00:00'))

  3. PHP传值与传址(引用)

    传值和传引用的区别在于,如果一个参数比较大,占用大量的内存空间,那么传引用的话就会节省拷贝空间. 传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值 传引用 :真正的以地址的方式传递参 ...

  4. 树莓派3中运行Netcore2.0程序

    一.简介 Netcore2.0发部后,可以运行在Arm平台上.因此,我们可以尝试在装了Debain的树莓派中运行. 二.方法: 1.在自己的电脑上使用VS写一个NetCore2.0的控制台程序,我假设 ...

  5. eclipse 远程调试程序

    最近遇到一个非常恶心的问题,本地调试没有问题,到了线上就复发,逼于无奈只能使用eclipse远程调试,下面把步骤记录一下: 1.修改服务器的启动脚本,添加如下内容: export JPDA_ADDRE ...

  6. [转]Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

    转自:http://www.trinea.cn/android/maven/ 两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下.写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠 ...

  7. reStructuredText - 一个比MarkDown更好用的标记语言

    文档和教程 http://docutils.sourceforge.net/rst.html http://zh-sphinx-doc.readthedocs.io/en/latest/rest.ht ...

  8. WireShark开启IP, TCP,UDP校验和的办法

    首先点击编辑->首选项

  9. Atlas:ERROR 1105 (HY000): #07000Proxy Warning - IP Forbidden

    1:遇到一个奇怪的问题 Atlas的管理接口正常 添加一个client之后save config mysql -uroot -p -P1234 -h127.0.0.1 报错了:ERROR 1105 ( ...

  10. 发现一个ReactNative大神

    传送门: RN使用技巧:http://www.jianshu.com/p/2f575cc35780 RN 进阶技巧:http://www.jianshu.com/p/b877115fff1b 亮点有: ...