解决华为手机隐藏虚拟按键Activity被重新创建的问题

  • 问题描述
    • 解决方法
    • 分析

问题描述

在华为手机P9上 屏幕底部虚拟按键用户可以随时隐藏或显示,在改变后 返回上一页,会导致页面重新创建,页面操作出现问题。

解决方法

在AndroidManifest.xml中出问题的activity 增加android:configChanges=“screenLayout”,这样页面就不会重建。
例如:

 <activityandroid:name=".MainActivity"android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"android:screenOrientation="portrait"/>

分析

虚拟按键可隐藏 这是华为定制的功能,有个功能的手机应该都会有这个问题,导致页面重建其实就类似于手机翻转屏幕,翻转屏幕后页面会被重建,一般我们会重写Activity.onRetainNonConfigurationInstance(),在用户横竖屏切换前保存数据,在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据恢复之前的页面。
为了避免页面被重建 我们可以使用configChanges来屏蔽掉导致发生改变的系统配置属性,怎么知道属性名是什么呢?
可以在会被重建的页面onCreate方法中将配置信息打印一遍

 @Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);Configuration configuration = getResources().getConfiguration();LogUtils.e("configuration:"+MGson.getInstance().toJson(configuration));}

然后在onConfigurationChanged方法中再打印一遍

    @Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);Configuration configuration = getResources().getConfiguration();LogUtils.e("configuration:"+MGson.getInstance().toJson(configuration));}

下面是隐藏虚拟按键返回上一页,两次打印的数据:

{"appBounds":{"bottom":"1920","left":"0","right":"1080","top":"0"},"assetsSeq":"0","colorMode":"5","compatScreenHeightDp":"547","compatScreenWidthDp":"320","compatSmallestScreenWidthDp":"320","densityDpi":"480","extraConfig":{"hwtheme":"0","isClearCache":"0","simpleuiMode":"1","userId":"0"},"fontScale":"1.0","hardKeyboardHidden":"2","keyboard":"1","keyboardHidden":"1","locale":"zh_CN_#Hans","mLocaleList":{"mList":["zh_CN_#Hans"],"mStringRepresentation":"zh-Hans-CN"},"mcc":"0","mnc":"0","navigation":"1","navigationHidden":"2","nonFullScreen":"0","orientation":"1","screenHeightDp":"616","screenLayout":"268435810","screenWidthDp":"360","seq":"76","smallestScreenWidthDp":"360","touchscreen":"3","uiMode":"17","userSetLocale":false}
{"appBounds":{"bottom":"1792","left":"0","right":"1080","top":"0"},"assetsSeq":"0","colorMode":"5","compatScreenHeightDp":"509","compatScreenWidthDp":"320","compatSmallestScreenWidthDp":"320","densityDpi":"480","extraConfig":{"hwtheme":"0","isClearCache":"0","simpleuiMode":"1","userId":"0"},"fontScale":"1.0","hardKeyboardHidden":"2","keyboard":"1","keyboardHidden":"1","locale":"zh_CN_#Hans","mLocaleList":{"mList":["zh_CN_#Hans"],"mStringRepresentation":"zh-Hans-CN"},"mcc":"0","mnc":"0","navigation":"1","navigationHidden":"2","nonFullScreen":"0","orientation":"1","screenHeightDp":"573","screenLayout":"268435794","screenWidthDp":"360","seq":"77","smallestScreenWidthDp":"360","touchscreen":"3","uiMode":"17","userSetLocale":false}

对比下可以发现screenLayout属性发生了改变,这就是我们屏蔽掉的属性名。

Android:解决华为手机隐藏虚拟按键Activity被重新创建的问题相关推荐

  1. 解决华为手机隐藏虚拟按键Activity被重新创建的问题

    把Activity的生命周期全部打印出来,确定隐藏或显示虚拟按键时,确实导致了Activity重建 然后在onCreate方法中 Configuration configuration = getRe ...

  2. 解决华为手机隐藏虚拟按键Activity被重启的问题

    引言 最近技术群里面的妹纸说:在华为手机上开发应用的时候,隐藏底部的虚拟按键Activity会被重启的问题,并且找不到问题所在,于是查查资料,发现问题解决起来蛮简单的. 问题描述 一开始觉得应该是代码 ...

  3. 解决输入法遮挡布局和华为手机底部虚拟按键遮挡底部界面的方法

    先上最终的代码: public class AndroidWorkaround {public static void assistActivity(View content) {new Androi ...

  4. 界面适配华为手机的虚拟按键的解决方案

    一.概述 在项目中,测试发现在一些华为手机的屏幕适配上出现了问题,主要是因为华为Mate等一些系列的手机有一个虚拟按键的设计.当这些虚拟按键由用户手势滑出,或默认显示的话,就会遮挡我们本身的应用布局. ...

  5. android dialog隐藏虚拟按键,关于此框架在BottomSheetDialogFragment使用时,华为手机底部虚拟按键弹出与隐藏时输入框位置不贴键盘...

    我这边试过还是不行,而且我们ui是要dialog不全屏的,下面附上代码 public void onStart() { super.onStart(); Dialog dialog = getDial ...

  6. Android解决华为手机上出现Register too many Broadcast Receivers的crash

    记录一下,方便下次找到! 这里只提供解决方法,需要相关原理请移动本文末尾! 第一步: 在项目lib的gradle引入库 dependencies {// add dependenciesimpleme ...

  7. android 华为底部虚拟键盘隐藏,Android隐藏手机底部虚拟按键的方法

    现在的Android手机有好多底部带虚拟按键,比如华为.nexus.魅族等等,一般情况下对APP没啥影响,但是有时候就必须要强制隐藏. 例如:游戏的时候,拍照的时候. 接下来加上几个方法就OK 了,代 ...

  8. Android实现隐藏手机底部虚拟按键

    现在的手机比较流行底部带虚拟按键,比如华为.nexus,一般情况下对开发一个APP没啥影响,但是不一般情况下就会有影响的,比如全屏录像功能, 用简单的方法直接获取camera支持的手机屏幕分辨率然后用 ...

  9. android 隐藏手机底部虚拟按键

    今天,简单讲讲android如何隐藏手机下面的虚拟按键. 其实,自己在做界面适配时,老是发现了华为手机存在适配的问题,主要就是华为手机有一个底部的虚拟按键占用了界面的部分空间,所以在网上搜索了如何隐藏 ...

最新文章

  1. memcached和redis的区别和应用场景
  2. MDK调试STM32出现“could not stop cortex-m device”解决办法
  3. 项目由于装运点不同交货拆分解决方案
  4. 验证码广告:站长增加收入新渠道
  5. 主体功能区规划的定位
  6. R语言高级算法之支持向量机(Support Vector Machine)
  7. 跨浏览器共享数据_可以让跨域要数据的模式:jsonp
  8. 软件易容术-----换肤
  9. clip_region_relclip_region
  10. 【微信小程序】小程序代码基本组成结构
  11. Github视频教程-黄棒清-专题视频课程
  12. 一个下载网页视频的方法
  13. 浏览器 播放音频(IE,谷歌)
  14. python编程助手_用Python做一个久坐提醒小助手的示例代码
  15. openwrt 软路由负载均衡
  16. 客户端七牛方式上传文件
  17. 前端面试题汇总(JavaScript面试纯干货)
  18. 计算机应用基础教程在线阅读,计算机应用基础教程
  19. 计算机组成原理 实验五 单周期cpu
  20. 阿里云盘视频m3u8播放-python+vue3实现

热门文章

  1. C++ Reference: Standard C++ Library reference: C Library: cctype: isspace
  2. free函数用法小结
  3. cocos creator实例--实现FlappyBird游戏的基本功能 | 附代码
  4. 爬楼梯-斐波那契数列
  5. 12 Python总结之蒙特卡洛模拟
  6. 使用Adobe Acrobat X Pro在PDF中添加文字和图片
  7. Shell文件加解密
  8. 全网最简约的Anaconda+Python3.7安装教程Win10(百分百成功)
  9. PPT里对指定三角形的三条边作垂直平分线的VBA代码,要求代码格式规范
  10. 使用 docx 库读取 Word 中表格数据