`
java-admin
  • 浏览: 1382289 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

android横竖屏总结

阅读更多

Android横竖屏要解决的问题应该就两个:一。布局问题;二。重新载入问题。

1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数:

    "unspecified"
    默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
    "landscape"
    横屏显示(宽比高要长)
    "portrait"
    竖屏显示(高比宽要长)
    "user"
    用户当前首选的方向
    "behind"
    和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
    "sensor"
    有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
    "nosensor"
    忽略物理感应器,这样就不会随着用户旋转设备而更改了 ( "unspecified"设置除外 )。

也可以在Java代码中通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);来设置。

如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。可以通过以下方法来切换布局:

1)在res目录下建立layout-land和layout-port目录,相应的layout文件不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,模拟器会自动寻找。

2)通过this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的OnCreate方法,你可以把以下方法放在你的OnCreate中来检查当前的方向,然后可以让你的SetContentView来载入不同的Layout xml.
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.i("info", "landscape");
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.i("info", "portrait");
}

2.重新载入问题。如果不需要从新载入,可以在androidmanifest.xml中加入配置android:configChanges="orientation",配置android:configChanges的作用就是如文档所说的:Specify one or more configuration changes that the activity will handle itself. If not specified, the activity will be restarted if any of these configuration changes happen in the system。这样在程序中. Activity就不会重复的调用onCreate()甚至不会调用onPause.onResume.只会调用一个onConfigurationChanged(Configuration newConfig)。

–*************其实在这里我遇到两个奇怪的问题,那就是

1.如果我在android:configChanges中只设置orientation,他依然会重新加载,只有设置了orientation|keyboardHidden它才会只调用一个onConfigurationChanged(Configuration newConfig)

2.当横屏变竖屏的时候,他会调用两次onConfigurationChanged,而竖屏转横屏时他只调用一次onConfigurationChanged,真是太奇怪了。如果你知道,欢迎留言共同探讨*************–

如果需要重新载入,则不需要做任何修改。不过如果需要在重新载入过程中保存之前的操作内容或数据,则需要保存之前的数据。然后在activity的onCreate()中取出来。当然,如此就不能设置android:configChanges()了,否则就不会调用onCreate()方法。那么数据可以保存在哪呢?Android中四种存储方法都可以,另外,还可以用Android为我们提供了onRetainNonConfigurationInstance()方法来暂时保存数据。

下面为此举个例子:

保存临时图片:

  1. @Override
  2. public Object onRetainNonConfigurationInstance() { 
  3. final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos]; 
  4.     keepPhotos(list); 
  5. return list; 

之后便可以在activity的onCreate()函数中实现重新调用临时文件,在代码中需要判断系统是否需要重新加载临时文件。以下是放在OnCreate()函数中加载临时文件的代码:

  1. private void loadPhotos() { 
  2. final Object data = getLastNonConfigurationInstance(); 
  3.  
  4. // The activity is starting for the first time, load the photos from Flickr
  5. if (data == null) { 
  6.         mTask = new GetPhotoListTask().execute(mCurrentPage); 
  7.     } else { 
  8. // The activity was destroyed/created automatically, populate the grid
  9. // of photos with the images loaded by the previous activity
  10. final LoadedPhoto[] photos = (LoadedPhoto[]) data; 
  11. for (LoadedPhoto photo : photos) { 
  12.             addPhoto(photo); 
  13.         } 
  14.     } 

对于大多数的情况并不需要做如上的操作,所以需要谨慎使用这个行文,毕竟最好的行为也并不适用于所有情况,如果应用的不好反而会给程序带来不必要的麻烦。

如果要彻底禁止翻转,可以设置android:screenOrientation的属性为nosensor,如此就可以忽略重力感应带来的麻烦了。不过不知道为什么,在模拟器上不管用,听别人说在真机上是正确的,我没有真机,等有了真机再试试看。

 

 

 

http://www.zmkm.info/?p=100

分享到:
评论
5 楼 antoon.nee 2011-02-21  
确实要android:configChanges="orientation|keyboardHidden"才有效。多谢分享。
4 楼 zx273064010 2011-02-21  
 
3 楼 avtrucker 2010-12-02  
我只的是切换横竖屏时并没有重新调用onCreate()
2 楼 avtrucker 2010-12-02  
楼主您好,您的分享给了我很大帮助

对于您的奇怪的问题
1.如果我在android:configChanges中只设置orientation,他依然会重新加载,只有设置了orientation|keyboardHidden它才会只调用一个onConfigurationChanged(Configuration newConfig)
我已在windows+eclipse+android 1.6 SDK+乐phone真机测试 发现没有这个奇怪的问题,只设置为orientation 在我这里并没有调用onCreate()函数,只是调用了onConfigurationChanged()函数
1 楼 qiaoweishu 2010-10-21  
描述的很详细,受益匪浅!非常感谢!

相关推荐

    android横竖屏总结.doc

    总之,处理Android横竖屏切换涉及对布局的适配和Activity生命周期的理解。正确设置`AndroidManifest.xml`中的配置以及在代码中灵活处理布局加载和状态保存,是实现良好横竖屏切换体验的关键。开发者需要根据具体需求...

    Android 横竖屏切换

    总结来说,横竖屏切换在Android应用开发中是一个涉及到用户界面方向适应性和用户体验的重要部分。开发者需要根据应用的实际需求和功能设计,通过AndroidManifest.xml中的配置或者代码中的实现来控制Activity的屏幕...

    android横竖屏切换总结

    总的来说,Android开发者需要根据具体的应用需求来灵活处理横竖屏切换,确保用户在任何屏幕方向下都能获得良好的体验。通过合理设置`AndroidManifest.xml`中的属性和在代码中适当地处理配置变化,可以实现横竖屏切换...

    Android横竖屏切换及其对应布局加载问题详解

    总结起来,处理Android横竖屏切换的关键在于理解屏幕方向变化对`Activity`生命周期的影响,以及如何通过布局文件分隔和`onConfigurationChanged()`方法来适配不同屏幕方向。正确地管理这些方面可以使应用在横竖屏间...

    Android studio通过切换不同layout实现横竖屏适配

    1. 在Android Studio中,可以通过AVD(Android Virtual Device)模拟器测试横竖屏切换。在AVD Manager中创建一个新的设备,选择支持横竖屏的设备配置。 2. 运行应用,然后在AVD的顶部菜单中选择旋转按钮或直接拖动...

    Android横竖屏切换实例总结

    总结,Android横竖屏切换涉及多个方面,包括通过XML配置文件或Java代码控制屏幕方向,利用资源定向创建不同的布局,以及通过`onConfigurationChanged`方法处理屏幕变化时的逻辑。开发者应根据实际需求选择合适的策略...

    android动态创建fragment,横竖屏切换.

    总结,Android中的动态创建Fragment和横竖屏切换是开发过程中的常见操作。理解Fragment的生命周期、如何在Activity中添加和管理Fragment,以及如何处理横竖屏切换时的状态保存,是每个Android开发者必须掌握的基本...

    Android 的一些特效

    android横竖屏总结.doc Android 的手势拖动切换ViewViewFlipper.doc Eclipse内存不足的解决办法.doc EditView 阻止软键盘自动弹出.doc HttpClient的一个应用的例子(图片下载).txt RatingBar 更换图片.doc ...

    Android的一些特效资料

    android横竖屏总结.doc Android 的手势拖动切换ViewViewFlipper.doc Eclipse内存不足的解决办法.doc EditView 阻止软键盘自动弹出.doc HttpClient的一个应用的例子(图片下载).txt RatingBar 更换图片.doc TextView...

    Android横竖屏幕切换小结

    在Android开发中,横竖屏切换是...总结来说,Android横竖屏切换涉及到`AndroidManifest.xml`的配置、Activity生命周期回调、布局资源管理等多个方面。开发者应根据应用的需求灵活处理,确保用户体验的流畅性和一致性。

    Android横竖屏贴换调动方法

    本篇文章将深入解析Android横竖屏切换时Activity生命周期的变动,以及如何通过配置`android:configChanges`属性来控制Activity的行为。 首先,当我们不进行任何特殊配置时,即在`AndroidManifest.xml`中没有指定`...

    Android监听横竖屏切换功能

    总结来说,Android监听横竖屏切换功能,通过在AndroidManifest.xml中设置android:configChanges属性,以及在Activity中重写onConfigurationChanged方法,来实现屏幕方向变化的监听和处理。这对于需要在横竖屏切换时...

    Android-加速传感器或者OrientationEventListener做横竖屏切换

    在Android开发中,横竖屏切换是常见的应用场景,特别是在观看视频、玩游戏等场景下。当用户设备的自动屏幕旋转功能关闭时,开发者需要通过其他方式实现这一功能。本篇文章将详细探讨如何利用加速传感器...

    解决Android横竖屏切换数据丢失问题的方法

    总结来说,处理Android横竖屏切换数据丢失的问题,关键在于理解Activity生命周期的变化以及如何利用`onConfigurationChanged()`方法来适配屏幕配置的变化。通过合理配置`AndroidManifest.xml`和编写适当的代码,可以...

    3-12-6(横竖屏切换处理).7z

    总结起来,横竖屏切换处理是Android开发中的一个核心环节,涉及到了活动生命周期、资源配置、布局适配等多个方面。理解和熟练掌握这些知识点,将有助于构建出更加健壮、适应性强的Android应用。

    横竖屏切换

    总结,横竖屏切换是移动应用设计中重要的一环,合理地利用这一特性可以增强用户体验。在Android和iOS平台上,开发者都有多种方式来实现和控制横竖屏切换,同时需要注意布局适配、性能优化以及用户体验的提升。

    Android面试题总结

    4. **横竖屏切换**: 横竖屏切换时,Activity生命周期的处理取决于在清单文件中对`android:configChanges`的设置。默认情况下,屏幕切换会导致Activity销毁和重建;如果设置`android:configChanges="orientation|...

    Android 8.0系统界面切换时闪屏问题

    然而,在某些情况下,这些动画效果会导致屏幕短暂黑屏或闪烁,尤其是在快速连续进行多个界面切换操作时更为明显。 #### 三、解决方案 为了避免这一问题的发生,可以通过自定义动画来覆盖系统默认的动画效果。具体...

Global site tag (gtag.js) - Google Analytics