Android Activity 状态保存

Android App 横竖屏切换的时候会销毁当前的 Activity 然后重新创建一个

横竖屏切换时 Activity 会经历如下生命周期

onPause --> onStop --> onDestory --> onCreate --> onStart --> onResume

禁止屏幕横竖屏自动切换

要禁止屏幕横竖屏自动切换,只要在 AndroidManifest.xml 中为 Activity 添加一个属性 android:screenOrientation

下表列出了该属性的可能值

说明
unspecified 默认, 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向
landscape 横屏显示(宽比高要长)
portrait 竖屏显示(高比宽要长)
user 用户当前首选的方向
behind 和该Activity下面的那个Activity的方向一致(在 Activity 堆栈中的)
sensor 有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换
nosensor 忽略物理感应器,这样就不会随着用户旋转设备而更改了 ( unspecified"设置除外)

横竖屏时加载不同的布局

横竖屏时加载不同的布局有两种方法

  1. 准备两套不同的布局,Android 会自己根据横竖屏加载不同布局

    创建两个布局文件夹: layout-land 横屏, layout-port 竖屏

    然后把这两套布局文件丢这两文件夹里,文件名一样,Android 就会自行判断

  2. 自己在代码中进行判断

    一般是在 onCreate() 方法中加载布局文件的,我们可以在这里对横竖屏的状态做下判断

    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){  
         setContentView(R.layout.横屏);
    }
    
    else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {  
        setContentView(R.layout.竖屏);
    }
    

如何让模拟器横竖屏切换

如果模拟器是 GM,则直接按模拟器上的切换按钮即可

原生模拟器可按 ctrl + f11/f12 切换

横竖屏切换时的状态保存

要在横竖屏切换时保存状态,可以使用 Bundle savedInstanceState 参数即可完

跟 savedInstanceState 有关的方法有三个

onCreate(Bundle savedInstanceState);
onSaveInstanceState(Bundle outState);
onRestoreInstanceState(Bundle savedInstanceState);

我们只要重写 onSaveInstanceState() 方法,往这个 bundle 中写入数据

outState.putInt("num",1);

然后在 onCreate 或者 onRestoreInstanceState 可以读取保存的的数据

需要注意的是,数据可能为空,所以在取之前先要判断是否为 null

savedInstanceState.getInt("num");

参考文档

  1. Android Activity

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.