阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1153|回复: 0

[转帖] Android:实时改变配置

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-1-19 16:13:40 | 显示全部楼层 |阅读模式
    Android通过终止、重启应用程序来重新加载资源文件,以做到对语言、区域和硬件实时变化的支持。
    它的默认的行为不是总是方便和令人满意的,尤其当配置变化(如屏幕方向和键盘可视)、用户旋转设备或划出键盘等。你可以通过监测和响应定制你的应用程序来对这些变化作出响应。
    为了能让Activity能禁用词语实时的配置变化,需要在manifest节点里添加“android:configChanges”特性,指定你要处理的配置变化事件。
    接下来的列表给出了你可以指定的配置变化的事件值:
    ❑ orientation
    屏幕在纵向和横向间旋转。
    ❑ keyboardHidden
    键盘显示或隐藏。
    ❑ fontScale
    用户变更了首选的字体大小。
    ❑ locale
    用户选择了不同的语言设定。
    ❑ keyboard
    键盘类型变更,例如手机从12键盘切换到全键盘
    ❑ touchscreen或navigation
    键盘或导航方式变化,一般不会发生这样的事件。
    你可以选择捕获多个事件,通过在各事件值间使用“|”。
    接下来的代码片段显示了Activity要捕获屏幕方向和键盘可视的事件:
    Java代码
    <activity android:name=”.TodoList”
    android:label=”@string/app_name”
    android:theme=”@style/TodoTheme”
    android:configChanges=”orientation|keyboard”/>
    增加这个特性就会强制应用程序在指定的配置变化时不用再重新启动,而是触发Activity中的onConfigurationChanged方法。如下面的代码片段所示,override这个方法去捕获配置变化,通过传入的Configuration 对象的值进行合适的处理。需要提醒的是需要调用父类的方法,并且要重新加载Activity使用的资源,以防有变更。
    Java代码
    @Override
    public void onConfigurationChanged(Configuration _newConfig) {
    super.onConfigurationChanged(_newConfig);

    [ ... 基于资源值更新UI ... ]

    if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
    [ ... 对不同的屏幕方向作出处理 ... ]
    }

    if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {
    [ ... 对键盘可见作出处理 ... ]
    }
    }

    当onConfigurationChanged 被调用时,Activity的资源变量都已经用新的值进行了更新,所以它们是安全的。
    任何你没有显式指明的配置变化事件,都将由应用程序捕获,而且仍然会引起应用程序的重启,而不会调用onConfigurationChanged 方法。

    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表