Android横竖屏切换:避免重建与布局适配实战

Android 横竖屏切换 1.横竖屏切换 Android横竖屏要解决的问题应该就两个: ①布局问题 ②重新载入问题 ③生命周期问题 2.布局问题 ①如果不想让app在横竖屏之间切换,可以在AndroidManifest.xml中指定的activity中加上android:screenOrientation属性,有以下几个参数: "unspecified":默认值 由系统来判断显示方向。判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.。 "landscape":横屏显示 "portrait":竖屏显. 阅读详情

1. 理解横竖屏切换的核心问题

Android开发中最让人头疼的问题之一就是横竖屏切换导致的Activity重建。想象一下这样的场景:用户正在你的应用中填写表单,突然旋转手机,结果刚刚输入的内容全部消失了!这种糟糕的体验往往会让用户直接卸载应用。

其实问题的根源在于Android系统的默认行为:当屏幕方向改变时,系统会销毁当前Activity并重新创建一个。这个过程会触发完整的生命周期回调:onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume。如果你的应用没有正确处理状态保存和恢复,用户数据就会丢失。

我在实际项目中就踩过这个坑。当时我们的应用有一个复杂的数据录入界面,用户抱怨说旋转手机后数据就没了。经过排查,发现就是因为没有正确处理横竖屏切换。后来我们采用了configChanges属性结合布局适配的方案,完美解决了这个问题。

2. 使用configChanges避免Activity重建

2.1 基本配置方法

要避免横竖屏切换时的Activity重建,最简单的方法就是在AndroidManifest.xml中配置configChanges属性。这个属性告诉系统:"这个配置变化由我自己处理,你不用重启我的Activity"。

正确的配置应该是这样的:

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:screenOrientation="unspecified" />

这里有个重要的细节:必须同时配置orientation、screenSize和keyboardHidden。很多老教程只写前两个,但在Android 3.2(API 13)之后,screenSize也必须加上,否则在某些设备上仍然会触发重建。

我刚开始用的时候也犯过这个错误,只配了orientation和keyboardHidden,结果测试的时候发现还是会被重建。后来查文档才知道需要加上screenSize。

2.2 处理配置变化回调

配置了configChanges之后,我们还需要重写onConfigurationChanged方法来处理配置变化:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 横屏处理逻辑
        Log.d("Orientation", "切换到横屏");
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        // 竖屏处理逻辑
        Log.d("Orientation", "切换到竖屏");
    }
}
Android屏幕显示 android:screenOrientation configChanges 处理配置变更 代码中动态切换横竖屏 具体区别如下:activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值,可以动态地根据设备的旋转或用户的操作进行改变。例如,当用户将设备从纵向旋转到横向时,获取到的屏幕方向值也会相应地改变。Manifest中配置的orientation是用于指定活动的默认方向,即在没有其他因素影响时,活动应该显示的方向。它可以有以下几个值:portrait:纵向(竖屏)方向。landscape:横向(横屏)方向。 阅读详情

相关推荐

Android自适应屏幕方向和大小

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

2401_84121798的博客 1970

Android横竖屏切换:生命周期、配置与布局适配实战解析

本文深入解析Android横竖屏切换的生命周期管理、configChanges配置与onConfigurationChanged使用技巧。通过实战案例详细讲解如何避免数据丢失、优化布局适配,并提供横竖屏切换的最佳实践方案,帮助开发者提升应用体验。

m2n3b4v5c6的博客 643

Android Fragment横竖屏切换适配

分享三种横竖屏切换后实现数据同步的方法

lbs_android的博客 2340

Flutter横屏适配实战:如何优雅处理横竖屏切换与UI布局?

本文深入探讨Flutter横竖屏适配的实战技巧,从基础设置到高级策略,帮助开发者优雅处理UI布局。通过`SystemChrome.setPreferredOrientations`控制屏幕方向,结合`OrientationBuilder`和`MediaQuery`实现动态布局,提升跨平台应用的用户体验。

weixin_30823001的博客 236

Android Activity数据保存与横竖屏切换处理指南

Activity是Android应用的核心组件,其生命周期管理直接影响用户体验。当设备配置变更如横竖屏切换时,系统默认会重建Activity实例,导致临时数据丢失。理解onSaveInstanceState机制和ViewModel等架构组件的工作原理,能够有效解决这一问题。通过Bundle保存简单数据、实现Parcelable接口处理复杂对象,结合LiveData实现数据观察,开发者可以构建更稳定的应用。这些技术在表单数据保存、游戏状态恢复等场景中尤为重要,是提升Android应用质量的关键实践。

weixin_30333885的博客 514

MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)

   分析大脑解剖学差异最常用方法之一是基于体素的形态学方法(voxel-based morphometry, VBM)。 VBM的基本思想是测量大脑组织,尤其是灰质的局部浓度的差异。在大脑的每个体素处进行操作,然后在两个或多个实验组之间进行统计比较,从而在受调查的组之间建立特定大脑区域中脑组织浓度的统计学显着差异。 VBM分析基于(高分辨率)MRI脑部扫描,涉及大量处理步骤,主要是空间归一化,分割,平滑和统计分析,最终结果是统计图,显示了各组之间组织类型明显不同的区域[^1]。 参考 [^1] ..

意疏的学习笔记 3万+

HFSS初学笔记(二)——75Ω带状线设计

本文利用HFSS软件设计并优化了一条75Ω的带状线结构,通过调整几何参数和介质材料,实现了精确的阻抗控制。仿真结果显示,该带状线在高频信号传输中的表现优越,具有良好的S参数、低插入损耗和极小的信号反射损耗。

2401_87464239的博客 4539

第二次 PX4仿真环境搭建过程全记录

参考链接 https://blog.youkuaiyun.com/yanwumuxi/article/details/80097294 https://www.ncnynl.com/archives/201709/2013.html 一、安装依赖项 我们使用Debian / Ubuntu LTS 作为Linux的标准支持版本,但是也支持Cent OS 和 Arch Linux的发行版本。 权限设置 警告:永远...

移步换景的博客 2261

【AI智能体】图像处理-生成营销 Banner 图

生成营销 Banner 图是一款用于制作营销图片的智能体,它可以根据指定的营销活动内容,快速生成活动 Banner 图片,降低活动运营成本、提高制图效率。

AI创变工坊,和1000万新个体创业者一起成长!愿大家都能跟上时代的洪流,不被社会淘汰,愿大家的生活工作收入都能具备竞争力! 1175

YOLO26改进策略【卷积层】| CVPR 2025 频率动态卷积 FDConv 频域分权重提多样性 + 双调制降冗余,增强特征表征能力

本文记录的是利用FDConv 算子改进 YOLOv11 的卷积层特征提取层。(Frequency Dynamic Convolution)通过傅里叶域权重划分与空间-频率双调制机制结合,实现YOLOv11特征提取中频率多样化的动态卷积与空间自适应的频带调制。本文利用算子,通过傅里叶不相交权重生成频率差异化的并行卷积核以丰富特征表达,再通过核空间调制和频带调制结合局部-全局信息、适配图像空间异构性,同时依托固定参数预算实现轻量化设计,对YOLOv11中目标的低频语义特征与高频细节/边界特征进行针对性增强、抑制

Limiiiing的博客 476

【Claude Code 源码解析教程】第4章:QueryEngine 查询引擎

本章深入解析 Claude Code 的核心引擎——QueryEngine,它是整个对话系统的"心脏",负责管理会话状态、消息处理流程和多轮对话支持。

rengang66的博客 269

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例

Robot_PLC_HMI_Automation 1万+

华为OD机试双机位C卷:挑选宝石 (C/C++/Python/JAVA/JS/GO)

华为OD机试双机位C卷 挑选宝石,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试-挑选宝石,华为OD机考-挑选宝石。

qq_45776114的博客 1500

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 深入解析STM32串口中断机制:从配置到实战应用
下一篇: 低功耗之王:MSP430与PIC在物联网设备中的能效对决
github5actions
博客等级 码龄1天 0粉丝 1824原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值