在做android或者Ophone开发时,在默认情况下当萤幕从竖屏变到横屏时会触发 onConfigurationChanged事件。在默认情况下会重新载入画面并显示和横屏一样的画面,这样会有2个问题:

1.佈局问题:在竖屏 显示的佈局 到横屏中由于宽和高发生了变化所有多少都会影响到佈局(除非你定制2套画面在然后加个判断在横屏时怎麽显示,在竖屏时怎麽显示),当然最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity 中加上

  只竖屏显示的话(android:screenOrientation="portrait")

  只横屏显示的话(android:screenOrientation="landscape")

2.画面重新载入问题:在默认情况下横竖切换时会重新载入画面,导致一些不必要的资源浪费,更严重的是画面上保持的资料(特别是游戏方面)也都被重置了(当然你可以在重置前保存这些资料到资料库或者到文字档案中),要怎麽避免在横竖切换时重新载入画面,

  1.首先要在 AndroidManifest.xml中找到你所指定的activity中加上

    android:configChanges="orientation|keyboardHidden"

  2.然后 在activity的逻辑处理中(代码部分)去重载onConfigurationChanged事件,具体代码参考一下:

@Override

      public void onConfigurationChanged(Configuration config)

      {

        super.onConfigurationChanged(config);

      }

以上就可以简单的控制你的app画面的显示方式并且在显示方式不变的情况下横竖屏切换时不会重新载入画面,即优化的你的app同时用户体验也相应提高了。

但是在自从android3.2以后,再这样设置的话,会发现转屏后仍然会调用OnCreate(),而不是onConfigurationChanged();跟踪framework层代码,就会发现问题所在,是由于google在android3.2中添加了screensize改变的通知,在转屏的时候,不仅是orientation发生了改变,screensize同样也发生了改变,而在判断是调用onConfigurationChanged还是OnCreate时,採用的是如下判断:


int diff = activity.mCurrentConfig.diff(config);
if (diff != 0) {
// If this activity doesn't handle any of the config changes then don't bother calling onConfigurationChanged as we'regoing to destroy it.
if ((~activity.mActivityInfo.getRealConfigChanged()& diff) == 0) {
shouldChangeConfig = true;
}
}
public int getRealConfigChanged() {
return applicationInfo.targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB_MR2 ? (configChanges | ActivityInfo.CONFIG_SCREEN_SIZE
| ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE) : configChanges;
}

通过上面的分析,可发现有两种方法解决该问题:(只需要修改AndroidManifest.xml) 1.指定android:configChanges="keyboardHidden|orientation|screenSize",其他的代码和以前的代码一样处理; 2.在AndroidManifest.xml中指定targetSdkVersion为3.2以前的版本(3.2的版本号为13),系统会自动加上screenSize属性值。

建议使用第一种方法。

更多相关文章

  1. Android(安卓)UI 如何让TextView中的文字居中显示
  2. Android(安卓)4.4 双显示屏支持实现思路(双屏异显)
  3. Android(安卓)TextView中标点符号或英文导致自动换行问题
  4. Android进阶(二十八)上下文菜单ContextMenu使用案例
  5. Android(安卓)直接显示yuv数据 通过Awesomeplayer方式直接显示(一
  6. Android(安卓)Metro风格的Launcher开发系列(一)
  7. Android(安卓)intent 显示和隐士意图
  8. Android:dkplayer非全屏时候显示返回按钮
  9. Android(安卓)显示GIF图片实例详解

随机推荐

  1. Android 资料总结(全)
  2. android 的一些小知识
  3. android菜鸟日记1
  4. 【安卓学习之开发工具】 Android Studio
  5. OpenCV源码交叉编译android库
  6. Android开发实例大全
  7. android文字阴影效果
  8. Android Text控件之属性:android:textAppe
  9. Android(安卓)Widget工具箱
  10. 创建android文件系统(Root file system)