亲测Android横竖屏切换小结,带测试结果

【Android每周专题】横竖屏切换和Activity中View状态的保持 每周专题名不符实,实在是惭愧,前段时间有点忙,没有及时更新,自我反省一下。 本周专题分为两个部分,第一部分是横竖屏切换的相关问题,第二部分是Activity中View状态的保持。 横竖屏切换 一、横竖屏切换时Activity的生命周期 1、启动Activity(竖屏时启动的) 11-01 01:48:17.144: I/a2bgeek(945): onCreate 11-01 01:4 阅读详情

以前无意中看到说Android横竖屏切换生命周期的问题,一直很好奇。在开发中也是为了避免Activity的UI重绘导致内存的消耗,我们一般在AndroidManifest.xml文件中给每个Activity加上android:configChanges="orientation|keyboardHidden"。开始我以为这样就ok了,完全可以解决了Activity的重建,可是事实并非如此,没有实践就没有发言权。

既然聊到这里了,那么就先说说关于横竖屏的基础知识吧,想看结果的可以直接忽略这里。

Android界面的横竖屏切换,一般是有设备的重力感应而触发的,我们可以在手机设置里面禁止应用的自动横竖屏切换,当然我们也可以在代码中进行设置。

一.  如何禁止APP内横竖屏切换

当手机没有关闭横竖屏切换功能时,系统一旦触发横竖屏切换,缺省状态下,当前活动的App的界面就会进行横竖屏切换,由于横竖屏的界面尺寸等参数不同,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就需要通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。

该android:screenOrientation属性,他有以下几个参数:

"unspecified":默认值由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.

"landscape":横屏显示(宽比高要长)

"portrait":竖屏显示(高比宽要长)

"user":用户当前首选的方向

"behind":和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)

"sensor":有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。

"nosensor":忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。

比如下列设置
android:screenOrientation="portrait"
则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。
android:screenOrientation="landscape",为横屏显示。
上述修改也可以在Java代码中通过类似如下代码来设置

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

假如Manifest和java代码中同时设置了这个属性,那么由于java代码中的优先级较高,它会覆盖掉Manifest中的配置。

二.  对于AndroidManifest.xml设置的补充

经过上面代码演示,我们可以看到具体实现涉及到了Manifest工程配置里面具体Activity的screenOrientation和configChanges两个参数,这两个参数screenOrientation的优先级是高于configChanges,即假如screenOrientation设置为固定横竖屏时,那么configChanges参数无论怎么设都没有办法引发横竖屏切换,除非在代码中手动调用setRequestedOrientation函数进行修改。

screenOrientation属性在前面已经讲过了,而关于configChanges属性设置有如下选项:

值

描述

mcc

IMSI移动台的国家代码(MCC)发生变化——一个SIM被探测到并且更新MCC

mnc

IMSI移动台的网络代码(MNC)发生变化——一个SIM被探测到并且更新MNC

locale

区域发生变化——用户选择了一个文本需要显示的新语言

touchscreen

触摸屏发生变化。(这个通常不会发生。)

keyboard

键盘类型发生变化——例如:用户插入了外接键盘。

keyboardHidden

键盘的可访问性发生变化——例如:用户发现了硬件键盘。

navigation

导航类型(轨迹球或dpad)发生变化。(通常不会发生。)

screenLayout

屏幕布局发生变化——这个会导致显示不同的Activity。

fontScale

字体缩放因子发生变化——用户选择了新的字体大小。

uiMode

当UI模式发生改变的时候——当用户放置设备到桌子或/汽车或夜间模式改变的时候可以引起UI模式变化。阅读UiModeManager。在API级别8时引入。

orientation

屏幕方向发生变化——用户旋转了屏幕。注意:如果应用程序的目标API级别是13或更高(通过属性minSdkVersion和属性targetSdkVersion声明),你也需要声明配置项screenSize,因为这将在设备选择图像和屏幕方向时发生改变。

screenSize

当前可用屏幕大小发生变化。这代表一个当前可用大小的变化,和当前的比率相关,因此当用户选择不同的画面和图像,会发生变化。然而,如果你的程序目标API级别是12或更低,你的Activity总是会自己处理这个配置变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)。在API级别13里加入的。

smallestScreenSize

物理屏幕大小的变化。不管方向的变化,仅仅在实际物理屏幕打包变化的时候,如:外接显示器。这个配置项的变化引起在smallestWidth configuration里的变化。然而,如果你的程序目标API级别是12或更低,你的Activity将自己处理这个变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)在API级别13里加入的。

layoutDirection

布局方向变化。例如书写方式从左向右(LTR)转换为从右向左(RTL)


三.  实际测试用例及结果

 测试环境Eclipse+ADT、genymotion Android 4.3和Android 2.3、酷派真机Android 4.3

 由于现在基本上找不到3.0以下的Android设备了,所以对照组就少了一个,但是亲测后,结合Android 4.3模拟器和酷派手机的输出是一致的,我相信应该模拟器和真机的结果是一样的。所以以下结果中Android 4.3代表模拟器和真机的结果。

(1)默认(缺省)情况下,即没有配置configChanges属性

          Android 4.3 :横屏切竖屏,竖屏切横屏都是一样的------会销毁重建一次。

         输出结果如下:

         Android 2.3 :横屏切竖屏,竖屏切横屏都是一样的------会销毁重建一次。(并没有看到网上说的横屏切竖屏会销毁2次)

        输出结果如下:

 (2) 在Manifest中给Activity配置android:configChanges="orientation”

           Android 4.3:横屏切竖屏,竖屏切横屏都是一样的------会销毁重建一次。

           输出结果如(1)中Android 4.3结果一致。

           Android 2.3: 横屏切竖屏,竖屏切横屏都是一样的-----都不会销毁重建。

 (3)在Manifest中给Activity配置android:configChanges="orientation|keyboardHidden”

           测试结果如(2)

 (4)在Manifest中给Activity配置android:configChanges="orientation|keyboardHidden|screenSize”

            Android 4.3:横屏切竖屏,竖屏切横屏结果一致------都不会销毁重建。

            Android 2.3:横屏切竖屏,竖屏切横屏结果一致------都不会销毁重建。


注:图片中的onSaveInstanceState并不属于Activity的生命周期,只是为了说明当要横竖屏切换的时候,我们可以在onSaveInstanceState中对一些UI数据进行保存,并可以在onRestoreInstanceState中进行恢复。

对比以上结果可以知道:

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时也是会执行一次。(就是这里要注意,很多网上都是错误的);

2、设置Activity的android:configChanges="orientation"时,高版本的系统切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;但是对于低版本的Android系统,则不会重新调用,这与网上说的也不一致。

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,结果和2一致。

4、设置Activity的android:configChanges="orientation|keyboardHidden|screenSize”时,低版本和高版本系统表现一致,即都不会销毁重建。

  网上说在Android 3.2之后,必须加上screenSize属性才可以屏蔽调用Activity的生命周期。虽然现在绝大部分手机是Android4.0以上的了,但是为了保证切屏时不会重新调用Activity的生命周期,我们还是最好在配置文件中加上screenSize属性。

参考文章:

http://www.cnblogs.com/franksunny/p/3714442.html



同时也欢迎大家来实验下,如果文章有误,欢迎指出。




Android_横竖屏、传感器 一、横竖屏切换 1、加载布局横竖屏切换是系统默认调用不同状态下的横竖布局根据横竖屏切换时所需要的不同布局,建立如① ①、在project视图下,建立布局文件 -land 横向 -port 纵向 系统会根据屏幕横竖自动调用对应的视图 返回Android视图 ②、xml属性–横竖屏切换: 在AndroidManifest.xml中找到指定的Activity,加上 and 阅读详情

相关推荐

Android应用如何支持屏幕多尺寸多分辨率问题

通过合理利用Android的资源管理系统,开发者可以在面对多分辨率、多尺寸设备时游刃有余。无论是图片资源的密度文件夹,还是和的限定符适配,都是为了让应用在各种屏幕上看起来和谐、自然。当然,这一切的前提是前期规划要做好,资源文件要组织得井井有条,不然后期维护会变成一场灾难。另外,随着设备的多样化,适配工作只会越来越复杂。未来可能还需要考虑折叠屏、可穿戴设备等新兴硬件形态,这就要求咱们不断学习新的适配技术,比如Jetpack Compose带来的响应式布局思路。

大模型大数据攻城狮的专栏 1082

Android横竖屏切换引起问题的小结

Android横竖屏切换引起问题的小结终于下定决心好好写(抄)写(抄)属于自己的博客了,以前总是懒惰,总是不肯行动,要知道这个世界永远不会为你而改变,我们只有改变自己。碎语少说,言归正传。关于Android应用横竖屏的切换所引起的问题以及解决的方法,我以前老大也曾不止一次问过我,而我却从没有认真思考、回答过他,现在我借此做个总结。

andayoung 5400

深信服防火墙路由模式开局部署-手把手教学(小白篇)

手把手教学,拿到深信服的防火墙路由模式该如何开局?

m0_64423407的博客 2万+

Android --- 屏幕方向screenOrientation属性详解

(横屏的旋转,不会出现竖屏的现象)根据传感器定位方向,旋转手机180度界面旋转。一般横屏游戏会是这个属性。(竖屏的旋转,不会出现横屏的现象)根据传感器定位方向,旋转手机180度界面会旋转。根据传感器定位方向,旋转手机90度,180,270,360,界面都会发生变化。由系统选择显示方向,不同的设备可能会有所不同。(旋转手机,界面会跟着旋转)限制界面为横屏,旋转屏幕也不会改变当前状态。限制界面为竖屏,旋转屏幕也不会改变当前状态。

2401_85039625的博客 2353

ml307 二次开发

中移物联网旗下4g模组官方网站官方教程id=514官方客户不知道啥时候上班 早上10点也说不在服务时间内 找不到官方的sdk下载路径。

myWorld001的博客 2879

SVPWM分析、各个扇区详细计算以及Matlab仿真

SVPWM分析以及各个扇区详细计算以及Matlab仿真说明目的两电平逆变器拓扑空间矢量扇区判断扇区内如何发波?矢量作用时间计算矢量切换时间的计算Simulink仿真/基于Matlab-R2014a版本 说明 第一次发文章,不太会用Markdown,word编辑的公式复制过来有些是乱码,因此都贴图了。 另外,本文公式和图片比较多,编辑工作量比较大,比较辛苦,转载的话,请注明出处,谢谢。 目的 由于在...

michaelf的博客 12万+

android: 横竖屏切换总结-布局改变和数据保存

目录:引言一、布局问题二、重新载入问题 三、Q:横竖屏生命周期的切换有可能是什么样的? 引言         Activity在Configuration变化(比如设备横竖屏切换)时会重启Activity,即会执行onDestory()周期函数,然后onCreate(),重新创建Activity。这是因为这样可以让Activity动态适应Configuration,比如横屏时使用横屏的la...

幸福过饱和的专栏 718

构建家庭NAS之三:在TrueNAS SCALE上安装qBittorrent

以qBittorrent为例,说明如何在TrueNAS SCALE上使用docker来安装应用。

luoqingyong的博客 7006

Android根据重力感应选装方向,四个方向都支持

不废话,直接上源码: 辅助工具类ChangeOrientationHandler.java public class ChangeOrientationHandler extends Handler { private Activity activity; public ChangeOrientationHandler(Activity ac) { super()...

supersukun的博客 585

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1029

地平线旭日X3 安装xfce桌面+VNC查看USB摄像头

VNC是Virtual Network Computing的缩写,它是一种使用RFB(Remote Frame Buffer)协议的用于控制远程电脑的图形桌面分享系统。xfce桌面相比于GNOME桌面更加轻量,占用的资源更少,在没有GPU的设备上也可以运行(旭日的Desktop版本从外观上好像就是xfce桌面,具体没有尝试)。可以使用专用的VNC客户端连接到开发板,例如vnc viewer。板子默认带有openssh-server,因此,WiFi热点连接成功后,就可以使用ssh登录开发板了。

bingdund的博客 509

android+4.3竖屏设置,亲测Android横竖屏切换小结,带测试结果

以前无意中看到说Android横竖屏切换生命周期的问题,一直很好奇。在开发中也是为了避免Activity的UI重绘导致内存的消耗,我们一般在AndroidManifest.xml文件中给每个Activity加上android:configChanges="orientation|keyboardHidden"。开始我以为这样就ok了,完全可以解决了Activity的重建,可是事实并非如此,没有实践...

weixin_35436993的博客 456

大模型测试人员完整学习体系(分层成长路线 + 知识框架 + 落地实操)

本文系统构建了大模型测试工程师的4级能力成长体系:L1(测试执行)-L2(专项测试)-L3(质量体系)-L4(行业标准),详细拆解了每个阶段的核心技能图谱。重点包括:入门层需掌握传统测试基础和大模型产品逻辑;进阶层需精通Prompt用例设计、RAG测试、安全对齐、自动化评测等专项能力;高级层聚焦评测平台搭建与质量体系建设;专家层深入算法对齐与行业标准制定。文章配套提供了分阶段技术工具栈、3-12个月学习路径及5类实战项目建议,形成了一套完整的大模型测试人才能力培养框架。

SmallBull的博客 456

亲测Android横竖屏切换小结,带测试结果(1),作为软件测试程序员都应掌握

经过上面代码演示,我们可以看到具体实现涉及到了Manifest工程配置里面具体Activity的screenOrientation和configChanges两个参数,这两个参数screenOrientation的优先级是高于configChanges,即假如screenOrientation设置为固定横竖屏时,那么configChanges参数无论怎么设都没有办法引发横竖屏切换,除非在代码中手动调用setRequestedOrientation函数进行修改。物理屏幕大小的变化。在API级别13里加入的。

2401_84267528的博客 792

Android Audio其他——数字音频接口(附)

数字音频接口 DAI,即 Digital Audio Interfaces,顾名思义,DAI 表示在板级或板间传输数字音频信号的方式。相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI 在音频电路设计中得到越来越广泛的应用。

小旭的专栏 1028

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

亲测Android横竖屏切换小结,带测试结果,2024年最新2024软件测试开发现状分析

然而,如果你的程序目标API级别是12或更低,你的Activity将自己处理这个变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)在API级别13里加入的。在API级别13里加入的。由于现在基本上找不到3.0以下的Android设备了,所以对照组就少了一个,但是亲测后,结合Android 4.3模拟器和酷派手机的输出是一致的,我相信应该模拟器和真机的结果是一样的。Android 4.3 :横屏切竖屏,竖屏切横屏都是一样的------会销毁重建一次。

2401_84265972的博客 1029

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Web端和App端测试小结

测试时,遇到过Web端的项目,也测试过App,对于两者的区别以及一些侧重点,结合网络和自己的实战经验总结记录下来,方便以后测试查看。 首先,从系统架构方面Web项...

zouhui1003it的专栏 414

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

软件测试 | 测试开发 | Web端和App端测试小结

但是移动端由于屏幕较小,页面及按钮会受到屏幕大小的限制,再加上用户都是通过手指进行操作,一些按钮、选择框等是否容易点击,多个可点区域位置较近时,点击部位稍微偏移,也许就会造成不同的结果,这种情况下是否可以达到预先的效果。一般的软件或应用,都会开放一部分页面,允许用户不登录时即可访问,而有些页面是必须要求用户登录的,主要针对这两种权限不同的页面做分享,然后通过分享进入本页面,查看权限的控制是否正常。另外,还需要关注的是,离线状态下会不会还不断的请求网络,不断的做网络相关的操作。

慕漓的博客 354

2024年最新APP测试用例小结(1),2024年最新已获千赞

一方面这类测试往往所消耗的时间会很长,降低了发现bug的速度,另一方面先做这部分测试后,再去发现主体功能的bug,那么在开发人员动了大量代码之后,还是要再执行一遍性能,压力和兼容测试的相关用例,不仅劳命伤财,效果还事倍功半。(4)页面操作过程中有系统打断,如来电,短信,闹钟提醒,日历提醒,蓝牙提醒,插拔数据线,插拔耳机,待机,锁屏,低电量提醒等。(2)真机效果与UE图没有视觉上的严重偏差,如字号,字体大小,加粗,字体颜色,行高,行间距,按钮摆放位置,间隔,尺寸等。(2)OS版本的兼容:IOS6-9;

2401_84141210的博客 1034

豆包输入法鸿蒙版上线:原生应用开发与AI输入新体验

原生应用开发是移动操作系统生态中的关键技术路径,它通过直接调用系统底层API实现更优的性能与功耗表现。在鸿蒙生态中,原生应用基于ArkTS语言与鸿蒙SDK构建,能够深度集成分布式软总线、原子化服务等核心能力,为开发者提供高效的系统级开发范式。这种技术架构不仅提升了应用响应速度与资源利用效率,也为用户带来更流畅、更智能的交互体验。在输入法领域,AI能力的引入进一步强化了智能联想与纠错功能,结合鸿蒙原生特性,可探索跨设备词库同步与场景化服务等创新应用。豆包输入法鸿蒙版的上线,正是这一技术路径的实践案例,为鸿蒙生

weixin_33966095的博客 389

Android横竖屏切换总结

Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified"

jiangxinyu的专栏 9万+

android 屏幕方向随传感器变化,并带有切换大屏,小屏和锁定屏幕方向

直接上完整代码: import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Bundle; import android.provider.Settings; import android.support.v7.app.AppCompatActivity; ...

lidongxiu0714 1193

android实现自动横竖屏切换,android 中实现横竖屏切换【原创】

我们在使用android手机的时候,发现一些应用有横竖屏切换的功能,一般实现有以下几种方法:一、设置1.通过XML设置横竖屏切换在项目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,它有以下几个参数:“unspecified” 默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示...

weixin_35927281的博客 4150

手机加速度传感器在Android横竖屏切换中的应用

文章目录如何判断手机的横竖屏使用加速度计实现接口使用使用加速度计和磁力计获取手机倾斜角度加速度传感器在Android横竖屏切换中的应用 如何判断手机的横竖屏 这个问题依赖与手机上的传感器 一般获取手机倾斜角度,用加速度计和磁力计去判断 如果只是判断横竖屏 可以只用加速度计 加速度计普及度高 使用加速度计实现 参考了AOSP的通用实现 public class AccelerometerListener { // Device orientation public static final int

研究员的自我修养 860
上一篇: linux chmod命令
下一篇: 太用力的人跑不远
android_cmos
博客等级 码龄12年 177粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值