Android:解决华为手机隐藏虚拟按键Activity被重新创建的问题
解决华为手机隐藏虚拟按键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被重新创建的问题相关推荐
- 解决华为手机隐藏虚拟按键Activity被重新创建的问题
把Activity的生命周期全部打印出来,确定隐藏或显示虚拟按键时,确实导致了Activity重建 然后在onCreate方法中 Configuration configuration = getRe ...
- 解决华为手机隐藏虚拟按键Activity被重启的问题
引言 最近技术群里面的妹纸说:在华为手机上开发应用的时候,隐藏底部的虚拟按键Activity会被重启的问题,并且找不到问题所在,于是查查资料,发现问题解决起来蛮简单的. 问题描述 一开始觉得应该是代码 ...
- 解决输入法遮挡布局和华为手机底部虚拟按键遮挡底部界面的方法
先上最终的代码: public class AndroidWorkaround {public static void assistActivity(View content) {new Androi ...
- 界面适配华为手机的虚拟按键的解决方案
一.概述 在项目中,测试发现在一些华为手机的屏幕适配上出现了问题,主要是因为华为Mate等一些系列的手机有一个虚拟按键的设计.当这些虚拟按键由用户手势滑出,或默认显示的话,就会遮挡我们本身的应用布局. ...
- android dialog隐藏虚拟按键,关于此框架在BottomSheetDialogFragment使用时,华为手机底部虚拟按键弹出与隐藏时输入框位置不贴键盘...
我这边试过还是不行,而且我们ui是要dialog不全屏的,下面附上代码 public void onStart() { super.onStart(); Dialog dialog = getDial ...
- Android解决华为手机上出现Register too many Broadcast Receivers的crash
记录一下,方便下次找到! 这里只提供解决方法,需要相关原理请移动本文末尾! 第一步: 在项目lib的gradle引入库 dependencies {// add dependenciesimpleme ...
- android 华为底部虚拟键盘隐藏,Android隐藏手机底部虚拟按键的方法
现在的Android手机有好多底部带虚拟按键,比如华为.nexus.魅族等等,一般情况下对APP没啥影响,但是有时候就必须要强制隐藏. 例如:游戏的时候,拍照的时候. 接下来加上几个方法就OK 了,代 ...
- Android实现隐藏手机底部虚拟按键
现在的手机比较流行底部带虚拟按键,比如华为.nexus,一般情况下对开发一个APP没啥影响,但是不一般情况下就会有影响的,比如全屏录像功能, 用简单的方法直接获取camera支持的手机屏幕分辨率然后用 ...
- android 隐藏手机底部虚拟按键
今天,简单讲讲android如何隐藏手机下面的虚拟按键. 其实,自己在做界面适配时,老是发现了华为手机存在适配的问题,主要就是华为手机有一个底部的虚拟按键占用了界面的部分空间,所以在网上搜索了如何隐藏 ...
最新文章
- memcached和redis的区别和应用场景
- MDK调试STM32出现“could not stop cortex-m device”解决办法
- 项目由于装运点不同交货拆分解决方案
- 验证码广告:站长增加收入新渠道
- 主体功能区规划的定位
- R语言高级算法之支持向量机(Support Vector Machine)
- 跨浏览器共享数据_可以让跨域要数据的模式:jsonp
- 软件易容术-----换肤
- clip_region_relclip_region
- 【微信小程序】小程序代码基本组成结构
- Github视频教程-黄棒清-专题视频课程
- 一个下载网页视频的方法
- 浏览器 播放音频(IE,谷歌)
- python编程助手_用Python做一个久坐提醒小助手的示例代码
- openwrt 软路由负载均衡
- 客户端七牛方式上传文件
- 前端面试题汇总(JavaScript面试纯干货)
- 计算机应用基础教程在线阅读,计算机应用基础教程
- 计算机组成原理 实验五 单周期cpu
- 阿里云盘视频m3u8播放-python+vue3实现
热门文章
- C++ Reference: Standard C++ Library reference: C Library: cctype: isspace
- free函数用法小结
- cocos creator实例--实现FlappyBird游戏的基本功能 | 附代码
- 爬楼梯-斐波那契数列
- 12 Python总结之蒙特卡洛模拟
- 使用Adobe Acrobat X Pro在PDF中添加文字和图片
- Shell文件加解密
- 全网最简约的Anaconda+Python3.7安装教程Win10(百分百成功)
- PPT里对指定三角形的三条边作垂直平分线的VBA代码,要求代码格式规范
- 使用 docx 库读取 Word 中表格数据