Android开发11——手机横屏和竖屏与android:configChanges
目前大多数手机都支持重力感应随之而来的就是屏幕方向改变的问题。对应普通开发者来说屏幕的随意改变也会带来困扰。在Google自带的doc里可以看到,如果设备的配置(Resources.Configuration中进行了定义)发生改变,那么所有用户界面上的东西都需要进行更新以适应新的配置。因为Activity是与用户交互的最主要的机制,它包含了处理配置改变的专门支持。除非你特殊指定,否则当配置发生改变(比如屏幕方向、语言、输入设备等等的改变)时你当前的activity都将被销毁,这销毁是通过一个正常的activity生命周期过程进行的。如果activity之前正在前景画面,当这个实例的onDestroy()调用完成后将会启动这个activity的一个新的实例,并将前面那个实例中所保存的内容传递给新的实例。因为任何的应用资源(包括layout文件)都有可能由于任何配置值改变。
因此处理配置改变的唯一安全的方法就是重新获取所有的资源,包括layout、绘图资源(原文drawables)、字符串资源。由于activity已经如何保存自己的状态并从这些状态中重建自身,所以activity 重新启动自身来获得新的配置将是一个非常便利的途径。
在一些特殊的情况中你可能希望当一种或者多种配置改变时避免重新启动你的activity。你可以通过在manifest中设置android:configChanges属性来实现这点。你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调用activity的onConfigurationChanged(Resources.Configuration)方法。
如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明),你的activity仍然要被重新启动,而onConfigurationChanged(Resources.Configuration)将不会被调用。
①在AndroidManifest.xml中设置Activity的android:configChanges属性
在屏幕方向改变的时候,如果没有处理,程序会自动重启。对应一些需要保存用户数据的应用中必须处理这种情况。
<activity android:name=".AndroidLight"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
指定了屏幕方向改变和键盘隐藏时通知程序。不会重新启动activity,而会调用activity的onConfigurationChanged(Resources.Configuration)方法。在程序中可以添加处理事件
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG," == onConfigurationChanged");
processLayout();//自定义函数处理配置改变事件
}
②可在AndroidManifest.xml中设置Activity的android:screenOrientation属性
<activity android:name=".AndroidLight"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这样指定屏幕方向为竖屏。屏幕就不会自动旋转了。横屏的值时landscape。
关于android:configChanges和android:screenOrientation的取值,可参看节选的博客
节选自http://ghostfromheaven.iteye.com/blog/967629
http://blog.sina.com.cn/s/blog_67aaf44401015zj6.html
Android开发11——手机横屏和竖屏与android:configChanges的更多相关文章
- H5网页判断手机横屏或是竖屏
我们做出来的H5页面在手机端浏览的时候,用户很有可能会产生更换横竖屏的操作,这时如果我们能够判断出横竖屏,就可以更好的优化我们的网页,进而拥有更好的用户体验度.下面是判断横竖屏的代码: window. ...
- js判断手机浏览器是横屏or竖屏
移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态. 从而根据实际需求而执行相应的程序.通过添加监听事件onorientationc ...
- 使用JavaScript判断手机是处于横屏还是竖屏
移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态.从而根据实际需求而执行相应的程序.通过添加监听事件onorientationch ...
- Android——横屏和竖屏的切换,以及明文密码的显示
查看API文档: android.content.pm.ActivityInfo 在手机的使用中,我们要根据不同的需求来改变屏幕的显示方向,一般在浏览信息时是竖屏,在玩游戏的时候就要切换到横屏. ...
- Android强制设置横屏或竖屏
全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TIT ...
- JQuery 判断IPad、IPhone、Android是横屏还是竖屏(Window.Orientation实现)
在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法. 代码如下: function ...
- 05 Android强制设置横屏或竖屏/全屏
全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TIT ...
- 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法 其实主要是通过window.or ...
- (转)Android强制设置横屏或竖屏
全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TIT ...
随机推荐
- 【图解】javaScript组成结构
- 用Bluepages来验证intranetId和Password的有效性
代码很简单,如下: int ret = -1;ReturnCode rc = null; cwa2 cw = new cwa2();rc = cw.authenticate(in ...
- shell中使用if判断时用到的一些参数
shell 编程中使用到得if语句内判断参数 –b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当path ...
- ArcGIS按字段属性分割文件
在ArcGIS中我们有时需要将一个文件安字段的属性分割成多个文件,网友总结了几乎所有的方法:http://blog.sina.com.cn/s/blog_4e87fb4c0100fcjh.html , ...
- 如何解决Cydia提示错误
删除/etc/apt/sources.list.d该目录下的cydia.list进入var/lib/apt/lists删掉此文件夹下的所有文件,以及partial下的文件,但须保留这个空文件夹.进入/ ...
- 在OpenERP8.0中如何激活及时通讯功能im
How to activate chat (im) in v8 (trunk) I know its already answered that chat (im) is only available ...
- ajax-原理分析
createTime--2016年9月19日13:59:11Author:Marydon参考链接 http://blog.csdn.net/csh624366188/article/details ...
- DB2建库简单例子
--重启数据库 FORCE APPLICATION ALL DB2STOP DB2START --创建数据库 TERRITORY US COLLATE USING SYSTEM ) CONNECT T ...
- raise语句
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python学习手册 868 #raise语句 res=[IndexError,TypeError] #ra ...
- reload基础
# -*- coding: utf-8 -*- #python 27 #xiaodeng #reload基础 #与import和from的不同之处: #reload是python的内置函数,而不是语句 ...