怎么在 Android 程序中禁止屏幕旋转和重启Activity

如何在 Android 程序中禁止屏幕旋转和重启Activity

禁止屏幕随手机旋转变化

有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:
在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screenOrientation=”landscape” 属性。

landscape = 横向
portrait = 纵向

 

避免在转屏时重启Activity

android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次 Create的时候载入配置,那样,进行中的游戏就不会自动重启了!
要避免在转屏时重启Activity,可以通过在AndroidManifest.xml文件中重新定义方向(给每个Activity加上android:configChanges=”keyboardHidden|orientation”属性)。
在需要控制屏幕显示方向的Activity中重写 onConfigurationChanged(Configuration newConfig)方法,这样在转屏时就不会重启Activity了。

 
01 if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
02
03 //横向
04 setContentView(R.layout.file_list_landscape);
05
06 }else{
07
08 //竖向
09 setContentView(R.layout.file_list);
10
11 }

在模拟器中可以按 CTL+F11 模拟做屏幕旋转。

posted @ 2011-10-10 15:52 松门一枝花 阅读(182) 评论(0) 编辑

Handler.sendMessage(new Message) 须发送新对象

Handler.sendMessage(new Message). 这个方法是指 Handler 在发送消息的时候,需要发送一个新的对象。也就是每次在发送消息时,在更新了 Date 后,需要重新构造 Message 对象,而不是利用已经构建的对象,否则会报错:

06-27 09:25:39.073: ERROR/AndroidRuntime(1170): android.util.AndroidRuntimeException: { what=0 when=3496212 arg1=10 obj=android.graphics.drawable.AnimatedRotateDrawable@44f4b1a8 } This message is already in use.

若是了解 Handler 的消息队列机制,就会明白为什么会报“This message is already in use.”的错误了,因为 Handler 每次 sendMessage() 时,都会将一个消息送到一个消息对队列中,所以必须必须是一个新的 Message 对象才行。