zoukankan      html  css  js  c++  java
  • android onConfigurationChanged讲解

                                              

                                              本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


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


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

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

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

    mnc:移动设备网络代码(Mobile Network CodeMNC)更换的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这个指的是该控件相对于父控件的距离.




  • 相关阅读:
    SCI写作经典替换词,瞬间高大上!(转)
    最佳化常用测试函数 Optimization Test functions
    算法复杂度速查表
    VS 代码行统计
    CPLEX IDE 菜单栏语言设置( 中文 英文 韩文 等多国语言 设置)
    如何从PDF文件中提取矢量图
    Matlab无法打开M文件的错误( Undefined function or method 'uiopen' for input arguments of type 'char)
    visual studio 资源视图 空白 解决方案
    MFC DialogBar 按钮灰色不响应
    嗨翻C语言笔记(二)
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147378.html
Copyright © 2011-2022 走看看