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"设置除外) |
横竖屏时加载不同的布局
横竖屏时加载不同的布局有两种方法
-
准备两套不同的布局,Android 会自己根据横竖屏加载不同布局
创建两个布局文件夹: layout-land 横屏, layout-port 竖屏
然后把这两套布局文件丢这两文件夹里,文件名一样,Android 就会自行判断
-
自己在代码中进行判断
一般是在 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");