android:configuration 处理屏幕旋转和语言切换等问题

原文地址:http://blog.csdn.net/liuweiballack/article/details/49800829

当APP设置为屏幕可旋转的时候,会发现在旋转屏幕的过程中,用户在EditText等控件中输入的内容会随之消失,这种情况同样发生在切换系统语言的时候。

打印APP的生命周期,当进行屏幕方向转换的时候,生命周期如图:

这里写图片描述

屏幕方向的转换,引起了Activity的重建,重新执行了onCreate( )方法。 
由于数据没有保存,在Activity重建之后,数据丢失。

解决方法:

一、防止Activity重建

在AndroidManifest.xml中对Activity设置 Android:configChanges=”orientation|screenSize”,告诉系统在进行方向转换的时候,不要去销毁Activity并重建,直接调用onConfigurationChanged(Configuration newConfig)方法,由用户去进行处理,这就要求开发者在Activity中重写onConfigurationChanged(Configuration newConfig)方法,将改变方向需要做的处理写到onConfigurationChanged(Configuration newConfig)中,比如在屏幕方向转变的时候进行布局的切换。 
这时候在进行方向转换的时候,不会在进行生命周期的变化,而是直接调用了onConfigurationChanged()方法。如图

这里写图片描述

二、允许Activity重建

如果允许Activity重建,则需要开发者对重建Activity前后的数据进行保存,保存数据时,重写onSaveInstanceState(Bundle outState)方法,将数据以键值对的方式保存;恢复数据时,重写onRestoreInstanceState(Bundle savedInstanceState)方法,或者在onCreate()方法中判断onSaveInstanceState是否为空,不为空时则表明该Activity是被Destroy的而重建的,利用savedInstanceState取出保存的数据。

这两个方法由系统调用,调用时机如图:

这里写图片描述

android:configChanges中可设置的属性较多,具体介绍可参照android官方文档: 
http://developer.android.com/guide/topics/manifest/activity-element.html

注意: 
在设置语言切换属性的时候,在4.2系统之前,只需要设置为

android:configChanges="locale" 
 
 
  • 1
  • 1

但是在4.2之后,需要同时设置layoutDirection,即

android:configChanges="locale|layoutDirection"
 
 
  • 1
  • 1

否则仍会导致Activity的重建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值