Android onconfiguration属性
2015-08-06 19:16
239 查看
原文: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方法,这样就减少了我们代码的复杂性
说了这么多好处,那么怎样做,才能做到呢?
首先加入权限 :
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
然后给Activity设置属性:
如android:configChanges="orientation|keyboard"
最后在Activity的onConfigurationChanged加载不同的布局,或采取相应的操作即可。
小知识记录:
getRawX()和getRawY():获得的是相对屏幕的位置.
getX()和getY():获得的永远是相对view的触摸位置坐标(这两个值不会超过view的长度和宽度)。
getLeft , getTop, getBottom,getRight, 这个指的是该控件相对于父控件的距离.
老规矩,先讲讲官方文档是怎么说的。为什么需要这个属性呢?原因很简单,当前手机信息、状态发生改变时,它就会被销毁然后重启动,浪费资源;怎么来防止这类情况发生呢?很好,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 , getTop, getBottom,getRight, 这个指的是该控件相对于父控件的距离.
相关文章推荐
- Android 圆形滚动菜单
- Android中的布局优化方法
- 仿Android L 长按Home键显示最近使用应用信息及清理
- Android布局优化
- android textview 超链接跳转到浏览器
- Android中 View not attached to window manager错误的解决办法
- android中使用LocationManager定位获取信息
- android Log.isLoggable方法的使用
- Android笔记(三) 使得Activity之间可以跳转---Intent
- Android页面跳转的方法
- Android复习笔记(13)-Fragment的使用(1)
- 三种方法使android 手机执行 二进制程序
- Android实现水波纹外扩效果
- Android WebView加载本地CSS
- 【Android】五大布局
- 在线阅读android源码
- Android的RelativeLayout的view的layout_marginBottom不起作用
- AndroidStudio单元测试——instrumentation
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags()
- Android使用WindowManager在界面添加一个悬浮框