android onConfigurationChanged讲解

                                          

     本文来自刘兆贤_Java高级,Android旅行,Java底层探索-CSDN博客 ,引用必须注明出处!

        相信大家对这个属性已经耳熟能详,如果大家受过转屏的折磨的话!

        老规矩,先讲讲官方文档是怎么说的。为什么需要这个属性呢?原因很简单,当前手机信息、状态发生改变时,它就会被销毁然后重启动,浪费资源;怎么来防止这类情况发生呢?很好,onConfigurationChanged给我们带来了福音!

        那么哪些配置信息发生改变,会产生状况呢?下面我们来一起看看!

mcc:移动设备国家代码(Mobile Country Code,MCC)更换的Sim卡改变了MCC.

mnc:移动设备网络代码(Mobile Network Code,MNC)更换的Sim卡改变了MNC.

通过某个国家的国家代码和网络代码共同确定当前手机网络运营商;因为同一个网络在不同国家可能运营商不同。

locale:用户选择一种新的语言

touchscreen:更换手机屏幕.

keyboard:键盘类型发生改变,如更换外置键盘.

keyboardHidden:手机键盘是否可显示被设置,如已使用外置键盘.

navigation:导航系统发生改变.

screenLayout:手机屏幕布局发生改变,如新的屏保被激活.

fontScale:手机字体发生改变.

uiMode:2.2系统之后才出现,如用户把手机放桌子上、车子上或默认模式被启用.

orientation:手机屏幕切换,如横竖屏;如果运行sdk在13及以上,也需要加上screenSize.

screenSize:可用屏幕大小发生改变;sdk在12及以下不需要注意.

smallestScreenSize:手机屏幕发生改变,且不用顾及转屏的问题;如放到一个投影仪查看手机,API13以上添加的属性.

layoutDirection:手机屏幕左右或上下互换,API17以上添加的属性.

        那么这些情况我们说清楚了,我们具体来讲讲为什么要监听这些状况,以及安卓为什么要来设计这么多状况(一句话,为满足用户使用手机的多样性)?

举例说明:讲述设置android onConfigurationChanged的意义 

不设置时,横屏导致当前Activity生命周期重新执行一次,竖屏两次

只设置为orientation时,横竖屏则只执行一次

而设置为orientation|keyboardHidden,则生命周期不再执行,只是执行onConfigurationChanged方法,这样就减少了我们代码的复杂性

        说了这么多好处,那么怎样做,才能做到呢?

        首先加入权限  :

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />

        然后给Activity设置属性:

 如android:configChanges="orientation|keyboard"

        最后在Activity的onConfigurationChanged加载不同的布局,或采取相应的操作即可。

小知识记录:

getRawX()和getRawY(): 获得的是相对屏幕的位置。
getX()和getY(): 获得的永远是在父view中的坐标 这两个值不会超过view的长度和宽度 )。
getLeft getTopgetBottom,getRight这个指相对于父控件的距离.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘兆贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值