我们自定义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. WinCE 下编程须要IP地址控件咋办?

    默认控件栏里面没有IP Address Control. 可是 WinCE 系统内的网络属性中是有这种控件的,想知道怎么调用IP Address Control的吗? 先通过远程工具 Remote S ...

  2. javascript基于原型的语言的特点

    一.基于原型的语言的特点 1 只有对象,没有类;对象继承对象,而不是类继承类. 2  “原型对象”是基于原型语言的核心概念.原型对象是新对象的模板,它将自身的属性共享给新对象.一个对象不但可以享有自己 ...

  3. Dicom格式文件解析器[转]

    Dicom格式文件解析器   Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯那方面的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理.只不 ...

  4. Spring Boot 之 RESTfull API简单项目的快速搭建(二)

    1.打包 -- Maven build 2.问题 [WARNING] The requested profile "pom.xml" could not be activated ...

  5. js 内置函数 内置对象

    1.内置函数 Object Array Boolean Number String Function Date RegExp Error 2.内置对象 Date JSON

  6. go1.8之安装配置

    说明: 之前学习过go语言(大概是0.9版本),后来更新太快,也没怎么使用,就荒废掉了,今年有项目需要用go开发,重新捡起. 这是我在学习go语言过程中整理的内容,这里记录下,也方便我以后查阅. 操作 ...

  7. DWR组件——基于远程过程调用实现Ajax

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6686115.html  一:DWR的用途 DWR(Direct Web Remoting)是一个Web远程调用 ...

  8. 【shell】shell基础脚本合集

    1.向脚本传递参数 #!/bin/bash #功能:打印文件名与输入参数 #作者:OLIVER echo $0 #打印文件名 echo $1 #打印输入参数 执行结果: 2.在脚本中使用参数 #!/b ...

  9. Aspect实现对方法日志的拦截记录

    在实际的业务系统中,我们通常都希望程序自动的打印方法的入参和返回值,某些特定的方法可能不想打印返回值(返回数据过大,打印日志影响效率),特有了下面的实现. 1.忽略返回值的java注解类 import ...

  10. 转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友

    看到有人在ps区咨询如何安装3d max教程,当你进行第一步之前,请先断开网络连接第一步:运行安装程序 第二步:接受安装协议,点击下一步会提示输入序列号 第三步:你会看到已经安装完成了的界面 第四部: ...