android实现在横竖屏切换时页面信息不被重置的示例分享

2019-12-10 20:09:17王冬梅

//    通过 android:configChanges="配置类型" 指定的配置类型的改动;
//    而对于其他配置的更改,则系统会先销毁当前屏幕的 Activity ,
//    然后重新开启一个新的适应屏幕改变的 Activity 实例。
public void
onConfigurationChanged( Configuration newConfig )
{
    // 一定要先调用父类的同名函数,让框架默认函数先处理
    // 下面这句一定不能省去,否则将引发:android.app.SuperNotCalledException 异常。
    super.onConfigurationChanged( newConfig );

    // 检测屏幕的方向:纵向或横向
    if ( this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE )
    {
        // 当前为横屏, 在此处添加额外的处理代码
    }
    else if ( this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
    {
        //当前为竖屏, 在此处添加额外的处理代码
    }

    //检测实体键盘的状态:推出或者合上    
    if ( newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO )
    {
        // 实体键盘处于推出状态,在此处添加额外的处理代码
    }
    else if ( newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES )
    {
        // 实体键盘处于合上状态,在此处添加额外的处理代码
    }
}

 

一、新建一个 Activity ,并把各个生命周期打印出来:
第一步:
运行 Activity ,得到如下信息:

复制代码
onCreate
onStart
onResume

 

第二步:
按 crtl + f12 切换成横屏时:

复制代码
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

 

第三步:
再按 crtl + f12 切换成竖屏时,发现打印了两次相同的信息:

复制代码
onSaveInstanceState
onPause