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这个指的是该控件相对于父控件的距离.




  • 相关阅读:
    mysql perl 抓取update语句
    $/ 改变换行符
    $/ 改变换行符
    java读取jpg图片旋转按比例缩放
    感应器
    lisp分支
    鸡肋的Drools
    postgre去重复记录
    拖拽到指定位置
    base64coder调用
  • 原文地址:https://www.cnblogs.com/fengju/p/6174445.html
Copyright © 2011-2022 走看看