Android通过终止、重启应用程序来重新加载资源文件,以做到对语言、区域和硬件实时变化的支持。

它的默认的行为不是总是方便和令人满意的,尤其当配置变化(如屏幕方向和键盘可视)、用户旋转设备或划出键盘等。你可以通过监测和响应定制你的应用程序来对这些变化作出响应。

为了能让Activity能监听实时的配置变化,需要在manifest节点里添加“android:configChanges”特性,指定你要处理的配置变化事件。

接下来的列表给出了你可以指定的配置变化的事件值:

orientation屏幕在纵向和横向间旋转。

keyboardHidden键盘显示或隐藏。

fontScale用户变更了首选的字体大小。

locale用户选择了不同的语言设定。

keyboard键盘类型变更,例如手机从12键盘切换到全键盘

touchscreennavigation键盘或导航方式变化,一般不会发生这样的事件。

你可以选择捕获多个事件,通过在各事件值间使用“|”。

接下来的代码片段显示了Activity要捕获屏幕方向和键盘可视的事件:

Java代码
  1. <activityandroid:name=”.TodoList”
  2. android:label=”@string/app_name”
  3. android:theme=”@style/TodoTheme”
  4. android:configChanges=”orientation|keyboard”/>

增加这个特性就会强制应用程序在指定的配置变化时不用再重新启动,而是触发Activity中的onConfigurationChanged方法。如下面的代码片段所示,override这个方法去捕获配置变化,通过传入的Configuration 对象的值进行合适的处理。需要提醒的是需要调用父类的方法,并且要重新加载Activity使用的资源,以防有变更。

Java代码
  1. @Override
  2. publicvoidonConfigurationChanged(Configuration_newConfig){
  3. super.onConfigurationChanged(_newConfig);
  4. [...基于资源值更新UI...]
  5. if(_newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
  6. [...对不同的屏幕方向作出处理...]
  7. }
  8. if(_newConfig.keyboardHidden==Configuration.KEYBOARDHIDDEN_NO){
  9. [...对键盘可见作出处理...]
  10. }
  11. }

当onConfigurationChanged 被调用时,Activity的资源变量都已经用新的值进行了更新,所以它们是安全的。

任何你没有显式指明的配置变化事件,都将由应用程序捕获,而且仍然会引起应用程序的重启,而不会调用onConfigurationChanged 方法。

更多相关文章

  1. Android中ListView实现子控件点击事件后ListView点击事件失效解
  2. Android手机端使用Zipalign优化apk应用程序
  3. 管理Android应用程序的资源
  4. 解决Popupwindow挡住软键盘问题
  5. android不同应用程序之间启动Activity
  6. android软件键盘隐藏
  7. Android中Dialog中自定义EditView导致软键盘无法弹出
  8. android中ListView控件&&onItemClick点击事件

随机推荐

  1. 【Azure】两台Linux虚拟机挂载共享文件
  2. Linux QT5.2下编译MySQL5.6.7驱动
  3. Linux使用wget下载整站
  4. Linux下SVN服务器安装配置及客户端安装说
  5. Ubuntu(16.04.2)学习笔记(一)如何解决dpkg:
  6. 使用Bash编写Linux Shell脚本-9. 参数和
  7. REDIS从LINUX文件写入批量数据
  8. Android usb client mass-storage 多存储
  9. linux 命令 grep 不使用 正则表达式
  10. 第十章嵌入式Linux调试技术