详解Android中的屏幕方向
详解Android中的屏幕方向
?
屏幕方向是对Activity而言的,所以你可以在AndroidManifest.xml文件中,通过<activity>标记的screenOrientation属性进行设定,例如:
通过setRequestedOrientation(xxx)方法设置与在AndroidManifest.xml文件中配置是等效的,因此通过以上例程明确指定方向后,Activity将不再自动根据物理传感器进行横竖屏切换,若要恢复,再调用setRequestedOrientation(UNSPECIFIED)即可。
?
另外,还可以通过Configuration对象来取得Activity当前的显示方向:
需要注意的是两者(ActivityInfo和Configuration)有关方向的常量定义是不一致的,ActivityInfo中有关常量是用于决策显示方向的策略,而Configuration对象中的常量则是明确的实际显示方向,共有4中可能:未定义(UNDEFINED)、横屏(LANDSCAPE)、竖屏(PORTRAIT)、以及正方形(SQUARE)。
?
最后来看看,如何在程序中捕获显示方向改变的事件,这得从Activity.onConfigurationChanged方法说起。
Android系统会根据设备的配置变化(如屏幕方向的变化)来重新加载不同的资源文件(如布局layout资源),它会通过终止并重启Activity来实现资源的重新加载。如果我们向其申明要自己处理(某些)配置变化,则必须自己负责相关资源的重新加载——也就是说目标Activity不会在(某些)配置变化时,再经历终止并重启的过程了。
我们关注显示方向的变化,需要在Activity申明时指定configChanges属性等于orientation,示例如下:
// 设备配置发生变化时回调public void onConfigurationChanged(Configuration conf) {//super.onConfigurationChanged(conf);//TODO:YOU Process...}这样当屏幕方向改变时以上方法会被回调。需要再次强调的是,只有在configChanges中指定的配置项发生变化时才会回调onConfigurationChanged,因此上面的方法仅在屏幕方向(orientation)发生变化时被回调。
1 楼 qiaoweishu 2010-10-19 大有收获,刚刚完成此项功能,拜读之后又有更深的了解!谢谢,非常感谢!
