Android中Activity运行时屏幕方向与显示方式详解
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:51
现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向)。但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运行时的屏幕方向。还有就是在我们用手机观看视频时,随意的进行横竖屏切换,但播放进度不会随着屏幕的转换而从头开始播放,为了实现这个功能,我们就需要在Activity转换时对当前数据进行保存。
现在根据以上两种需求,个人提出以下解决方案:
一、锁定Activity运行时屏幕方向,如下图(演示锁定横屏):

我们可以通过以下两种方式实现锁定Activity运行时屏幕的方向:
(1)通过修改AndroidMainfest.xml配置文件
修改Android/app/mainfests/AndroidMainfest.xml下的配置文件如下:
<activity>节点的android:screenOrientation属性可以完成该任务(portrait为保持竖屏,landscape为保持横屏)
(2)通过java代码实现:
现在第一种需求通过修改配置文件以及java代码的方式实现,但这里要注意的是当同时在配置文件以及java文件中设置了方向锁定时,系统会以配置文件设置为准(可以理解为配置文件优先级高于java代码)
二、Activity转换方向时数据的保存
下面我们展示Activity转换方向时未保存数据的情况:
演示中,我们通过记录按钮的点击次数(土司)来判断数据是否被保存

我们发现当屏幕(Acticity)由横屏转为竖屏时,数据未实现保存,继续从0开始计数点击次数。
当我们设置保存数据后,演示情况如下:

保存数据后,点击数土司会继续竖屏状态的数据更新,而不是从零重新开始。
针对数据保存我们同样有两种方法实现,分别为在java代码中使用onSaveInstanceState()方法以及在属性。
下面我们详细分析这两种方法的实现:
(1)onSaveInstanceState详解
实现代码如下(这里写了Activity的全部生命周期,并打印log用于分析性能):
功能实现的核心代码为protected void onSaveInstanceState(Bundle outState)方法。Activity旋转前后的Log如下:

从Log中可以得知屏幕(Acticity)旋转时,会销毁之前的Activity,然后重建旋转后的Activity。
(2)修改AndroidManifest.xml配置文件
在AndroidManifest.xml中添加configChanges属性,如下:
在java中添加对应的onConfigurationChanged()方法用于Log打印分析,方法本身在功能实现上无实际意义:
屏幕旋转前后Log如下(演示两次旋转):

从Log中可以得知屏幕(Acticity)旋转时,使用第二种方法保存数据不会销毁Activity,不用重复的销毁建立Activity从而达到优化内存性能的目的。建议使用这种方法
相关文章
-
Android中通过ActionBar为标题栏添加搜索以及分享视窗
Android中通过ActionBar为标题栏添加搜索以及分享视窗
- 互联网
- 2026年04月04日
-
Android自动化测试框架uiautomator2详解
Android自动化测试框架uiautomator2详解
- 互联网
- 2026年04月04日
-
Angular pagination分页模块 只提供分页参数处理 不处理分页记录数据
Angular pagination分页模块 只提供分页参数处理 不处理分页记录数据
- 互联网
- 2026年04月04日
-
Android支付接入(八):Amazon亚马逊支付
Android支付接入(八):Amazon亚马逊支付
- 互联网
- 2026年04月04日
-
Android之网络数据存储
Android之网络数据存储
- 互联网
- 2026年04月04日
-
Android之三种网络请求解析数据(最佳案例)
Android之三种网络请求解析数据(最佳案例)
- 互联网
- 2026年04月04日








