文档章节

关于安卓屏幕切换的过程

yolinfeng
 yolinfeng
发布于 2015/02/24 11:19
字数 796
阅读 32
收藏 0

在activity加入属性android:configChanges="keyboardHidden|screenSize|orientation"

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

-----------------------------------


第一种:转屏时禁止当前activity销毁,不重新创建activity并调用onCreate()方法,办法是在 AndroidManifest.xml 文件中对 当前Activity 添加配置属性android:configChanges=”orientation|keyboardHidden”,既可以实现禁用,然后如果还想监听到转屏的动作,可以在当前Activity 内复写onConfigurationChanged() 方法,做一些操作。

第二种:在当前Activity中复写onSaveInstanceState(Bundle outState)方法,在此方法内,把Activity在销毁之前要保存的数据存入Bundle 中,然后在onCreate(Bundle savedInstanceState)savedInstanceState中,将存入的数据取出,或者不再onCreate取,复写onRestoreInstanceState()方法,在这里边取也可以,但要注意的是onSaveInstanceState()方法是在onPausse()之前调用,onRestoreInstanceState()是在onStart()之后调用,这样,也可以实现信息的延续,如下:

存入数据:
 
protected void onSaveInstanceState(Bundle outState) {
 
  super.onSaveInstanceState(outState);
   outState.putInt("state",state);
 }
 
取出数据:
 
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 
if(savedInstanceState!=null){
      state=savedInstanceState.getInt("state");
     }
 

 
或者复写
 
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
 
 state=savedInstanceState.getInt("state");
 
}
第三种:禁止转屏,只允许横屏或者竖屏,方法:在 AndroidManifest.xml 文件中对当前Activity 添加配置属性 android:screenOrientation=”landscape” ,(landscape是横向,portrait是纵向),这样当然可以实现转屏时,数据保留的实现,可是,有些应用对于转屏是客户的正常的需求和体验,这个方法就不可取了。

上面三种方法,网上都有很多资料,我在此只是给大家梳理一下。下面,我就可能遇到的问题,可能是导致你最后无法实现的问题做一下补充。

 

重点来了,必看!!!
第一:其实android3.2以上的机器在按第一种方法设置是不起作用的,必须加上screenSize才行,即设置为这样android:configChanges=”orientation|screenSize|keyboardHidden”才会起作用,网上很少有告诉你这样设置的,很多都是像我说的第一种方法那样设置,结果你设置来设置去就是不起作用,抓破脑袋也想不出为什么。

 

第二:如果你的activity是TabWidget中的一个activity,那么就算你按上面的那样设置,同样还是不起作用,你必须在主Activity中添加上面的设置,才起作用,这个我在网上没有看到任何的文章有提示这个,是我自己试出来,如果你不知道的话,同样可能导致你抓破头皮也想不出来。唉。。。程序员真是个死脑细胞的活啊(题外话)。

好啦,如果你按照这样的设置,基本上,你的问题可以解决了,如果你的问题还是无法解决的话,可以留言一起探讨。

© 著作权归作者所有

下一篇: APP签名
yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
私信 提问
加载中

评论(0)

Android:这是一份全面 & 详细的补间动画使用教程

前言 动画的使用 是 开发中常用的知识 今天,我将将献上一份补间动画的使用教程,手把手教你使用补间动画。 目录 // 采用 标签表示平移动画

Carson_Ho
2019/07/25
0
0
Android的Activity屏幕切换动画(一)-左右滑动切换

这段时间一直在忙Android的项目,总算抽出点时间休息一下,准备把一些项目用到的Android经验分享一下。 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现...

Binny
2011/12/15
15.2W
28
Android 四大组件 (一) Activity 生命周期

简单粗暴。 分两块来熟悉activity生命周期:一.典型生命周期过程;二.异常情况下的生命周期过程。 一. 典型生命周期过程 Activitiy的生命周期方法主要有七个:onCreate()、onRestart()、onSta...

osc_shqlq255
2018/04/11
2
0
Android UI换皮肤或 白天黑夜模式

> 白天夜间模式场景,换肤框架 -- 关于三种『应用内主题切换』开源项目的一点思考- https://www.jianshu.com/p/2164fa5803b9 1.Theme的方案,在style文件中定义不同的主题即可 2.遍历View,对...

desaco
2018/08/27
0
0
Android7.0 分屏下 Activity 与 Fragment 生命周期(一)

小菜前段时间整理了一篇关于我们真的了解 Activity 与 Fragment 的生命周期吗?的小博文,整理了基础版的关于 Activity 与 Fragment 的生命周期。 后来又一次被一个大大神问到在 Android7.0...

阿策神奇
2018/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

直接显示StackOverflow的答题日期, 增加评论区回复的时间显示 ,修改时间显示到小时分。

// ==UserScript==// @name 直接显示StackOverflow的答题日期, 增加评论区回复的时间显示 ,修改时间显示到小时分。// @namespace http://tampermonkey.net/// @version ...

FalconChen
今天
36
0
Shader笔记_005 纹理

纹理最初的目的就是使用一张图片来控制模型的外观,通过纹理映射技术 我们可以把一张图粘贴在物体表面,逐纹素的控制模型的颜色。 通常美术建模的时候也会在软件里利用纹理展开技术把纹理展开成...

STONE-CITY
今天
12
0
iOS MVVM 与RAC结合使用

MVVM配合 RAC 更能发挥的淋漓尽致。 我们把 MVVM 第一篇的例子 KVO 的事件 替换成 配合RAC 框架使用, OC的话直接导入 : pod 'ReactiveObjC' Swift 直接用 RXSwift就可以。 把 ViewModel里加...

T型人才追梦者
今天
22
1
OSChina 周一乱弹 —— 影响心情的三座大山

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《浮生(inst.)》- 忘乡 / 墨凡悦 手机党少年们想听歌,请使劲儿戳(这里) @凝小紫...

小小编辑
今天
55
0
Unity中头发渲染

头发与普通PBR 材质最大的区别是 头发是各项异性的高光, 参考实现主要为下面文章 http://web.engr.oregonstate.edu/~mjb/cs519/Projects/Papers/HairRendering.pdf 头发包含 2个高光,以及高...

liyong2
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部