Android onconfiguration属性

原文:http://blog.csdn.net/liuxian13183/ 

老规矩,先讲讲官方文档是怎么说的。为什么需要这个属性呢?原因很简单,当前手机信息、状态发生改变时,它就会被销毁然后重启动,浪费资源;怎么来防止这类情况发生呢?很好,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方法,这样就减少了我们代码的复杂性


        说了这么多好处,那么怎样做,才能做到呢?
        首先加入权限  :




        然后给Activity设置属性:

 如android:configChanges="orientation|keyboard"

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

小知识记录:


getRawX()和getRawY():获得的是相对屏幕的位置.


getX()和getY():获得的永远是相对view的触摸位置坐标(这两个值不会超过view的长度和宽度)。


getLeft , getTop, getBottom,getRight, 这个指的是该控件相对于父控件的距离.

你可能感兴趣的:(Android应用)