`
crazier9527
  • 浏览: 1013399 次
  • 性别: 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://java-admin.iteye.com/blog/730863

分享到:
评论

相关推荐

    Android 横竖屏切换

    在Android开发中,横竖屏切换是一个十分常见但又复杂的功能。Android设备上的屏幕方向变化通常由物理重力感应触发,但也可以通过软件设置来控制。在没有关闭横竖屏切换功能的情况下,当系统触发屏幕方向改变时,当前...

    android横竖屏切换

    在Android开发中,横竖屏切换是一个常见的需求,它涉及到屏幕方向变化时应用程序的处理方式。本Demo旨在演示如何在Android应用中实现横竖屏的切换,并妥善处理屏幕旋转带来的影响。下面将详细介绍这个主题。 1. **...

    Fragment的使用,隐藏显示以及androidPad横竖屏切换

    本示例“Fragment的使用,隐藏显示以及androidPad横竖屏切换”将重点讲解如何操作Fragment以及处理平板设备上的横竖屏切换。 首先,让我们深入理解Fragment的生命周期。Fragment有自己的onCreate(), onCreateView()...

    Android横竖屏切换处理Demo源码.rar

    在Android开发中,横竖屏切换是常见的场景,它涉及到应用程序界面布局的适应性和用户体验。这份"Android横竖屏切换处理Demo源码"提供了一个很好的学习示例,帮助开发者理解和处理这一问题。以下是对这个Demo源码中...

    Android视频播放器(支持横竖屏切换)

    在Android平台上开发一款支持横竖屏切换的视频播放器是一项常见的任务,这涉及到对Android多媒体框架的深入理解和屏幕适配策略。"Android视频播放器(支持横竖屏切换)"这个项目的核心目标是创建一个能够根据设备...

    Android应用源码之(横竖屏切换处理-IT计算机-毕业设计.zip

    在Android应用开发中,横竖屏切换是一项基本且重要的功能,尤其对于那些需要根据屏幕方向提供不同用户体验的应用来说。这份"Android应用源码之(横竖屏切换处理)"的资源,是一个非常适合毕业设计学习的示例,可以帮助...

    android 横竖屏切换生命周期

    android activity 执行屏幕横竖屏切换的时候activity声明周期执行的竖屏的时候点击横屏 09-04 15:54:27.675: I/yxd(6708): 应用程序执行了============onPause===方法===>> 09-04 15:54:27.685: I/yxd(6708): 应用...

    android安卓横竖屏切换效果、webview加载以及生命周期监测

    在Android开发中,横竖屏切换是常见的应用场景,它涉及到Activity的生命周期管理和用户界面的适配。本项目“LandscapePortraitDemo”旨在演示如何在Android Studio中处理这一问题,同时结合WebView的加载以及...

    androidApp横竖屏接口_religiousryg_reactnative_android_

    在移动应用开发中,横竖屏的切换是一个常见的需求,特别是在Android平台上。本文将深入探讨如何在ReactNative框架下调用Android原生接口来实现横竖屏的切换,以满足"androidApp横竖屏接口_religiousryg_reactnative_...

    android 视频播放 点击横竖屏切换 自动旋转横竖屏切换 冲突

    android 视频播放 点击横竖屏切换 自动旋转横竖屏切换 冲突 仿优酷(ios)效果 android没去看看到ios有这个效果 项目需要也实现了

    【Android每周专题】横竖屏切换

    在Android开发中,横竖屏切换是一个常见的需求,尤其对于那些需要根据屏幕方向提供不同界面布局的应用来说。本文将深入探讨Android系统中的横竖屏切换机制,并通过"OrientationSwitchDemo"这个示例代码来帮助理解。 ...

    安卓Android源码——(横竖屏切换处理).rar

    在安卓(Android)系统中,横竖屏切换是应用程序开发中的常见需求,涉及到用户界面(UI)布局的动态调整和程序状态的保存与恢复。本资料"安卓Android源码——(横竖屏切换处理).rar"很可能是针对这一主题的一个实践...

    Android横竖屏切换

    在Android开发中,横竖屏切换是一个常见的需求,涉及到用户界面布局的变化以及应用程序状态的管理。以下是关于Android横竖屏切换的关键知识点: 1. **布局切换**: - 在Android项目中,为了处理横竖屏切换,开发者...

    Fragment实现横竖屏布局

    4. **横竖屏切换处理**:Android系统默认会保存Activity的状态并在横竖屏切换后重建Activity。如果希望在横竖屏切换时改变Fragment的布局,可以通过以下方式: - 在Fragment的onCreateView()方法中根据当前屏幕...

    android横竖屏切换总结

    在Android应用开发中,横竖屏切换是一个常见的需求,开发者需要处理好布局的变化以及由此引发的用户体验问题。本文将详细讲解如何在Android中实现横竖屏切换,并讨论如何禁止或控制这种切换。 首先,Android系统...

    android 二维码扫描 支持横竖屏切换Demo

    本Demo主要展示了如何利用zxing库实现一个支持横竖屏切换的二维码扫描功能。ZXing,全称Zebra Crossing,是一个开源的条码处理库,支持多种格式的条码和二维码扫描。 首先,我们需要在项目中集成zxing库。这里使用...

    android 2.2 中横竖屏切换管理方案

    在Android 2.2系统中,横竖屏切换的管理主要涉及到设备的传感器技术,特别是重力感应器,以及系统如何根据这些传感器的数据调整屏幕布局。这个过程的关键在于理解布局方式、角度阈值和旋转映射关系。 首先,我们要...

    Android之横竖屏切换

    Android 横竖屏切换是手机开发中一个非常常见的问题,很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常禁止掉横竖屏的切换,即通过在 AndroidManifest.xml 中设置 activity 中的 android:...

Global site tag (gtag.js) - Google Analytics