`
ipjmc
  • 浏览: 707997 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 处理横竖屏切换事件

阅读更多

    默认情况下,Activity在Configuration变化(比如设备横竖屏切换)时,会执行onDestory()周期函数,然后onCreate(),重新创建Activity。之所以这样是因为这样可以让Activity动态适应Configuration,比如横屏时使用横屏的layout,drawable等resources,竖屏时使用竖屏的layout,drawable等resources。重启Activity可能导致大量数据的重新获取,网络连接的重新建立等问题,用户体验非常差。Android Dev guide给出两种解决方案
1)在Configuration变化时,保持数据不变
2)你自己处理,而不是重启Activity

    下面分别详细介绍一下这两种方法
1)在Configuration变化时,保持数据不变。需要注意的是我们不应该保存那些依赖Activity的数据,比如Drawable,Adapter,View或者任何与Context相关联的数据。因为上一个Activity已经没有了,如果你还要保持这些资源的引用,可能导致资源泄露。使用方法如下:

    重写Activity.onRetainNonConfigurationInstance(),保存数据

@Override
public Object onRetainNonConfigurationInstance() {
    final MyDataObject data = collectMyLoadedData();
    return data;
}


    在onCreate()中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
    if (data == null) {
        data = loadMyData();
    }
    ...
}


2)你自己处理,而不是重启Activity。这种方法相对简单一些,缺点是动态适应差。比如横竖屏切换时需要你自己写代码来使用不同的layout等resource,语言设置的动态改变等,不推荐。使用方法如下:
    在AndroidManifiest.xml中为当前的Activity设置android:configChanges


<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">


    重写Activity.onConfigurationChanged(),做一些相应的动作,如果没有则可以不用重写


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}


    详情请参考:http://developer.android.com/guide/topics/resources/runtime-changes.html
分享到:
评论

相关推荐

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

    为了避免这种情况,可以在AndroidManifest.xml中为相应Activity设置`android:configChanges="orientation|screenSize"`,然后在Activity中覆盖onConfigurationChanged()方法,处理横竖屏切换。 ```xml android:...

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

    在处理横竖屏切换时,有两种主要策略: 1. **默认行为**:不指定`android:configChanges`,Android系统会在屏幕方向改变时销毁并重建Activity。这时你需要在`onSaveInstanceState()`中保存状态,在`onCreate()`或`...

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

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

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

    在Android开发中,横竖屏切换是常见的...通过这个Demo源码,你可以了解到Android如何处理横竖屏切换,如何保存和恢复状态,以及如何设计响应屏幕方向变化的布局。这将有助于你构建更健壮、更具适应性的Android应用。

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

    综上所述,“LandscapePortraitDemo”项目将展示如何在Android Studio中实现Activity的横竖屏切换,处理WebView的加载,以及对Activity生命周期的精细控制。通过对这些关键点的掌握,开发者能够构建出适应各种屏幕...

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

    "OrientationSwitchDemo"这个项目可能包含了处理横竖屏切换的代码示例,可以查看它的`MainActivity`类,看看如何处理`onConfigurationChanged()`,以及如何在布局文件中为不同方向提供资源。 理解并掌握Android的...

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

    本资料"安卓Android源码——(横竖屏切换处理).rar"很可能是针对这一主题的一个实践示例或教程,包含了关于如何处理横竖屏切换的详细代码实现。下面将详细讲解这个知识点。 1. **横竖屏切换机制**: 安卓系统允许...

    fragment横竖屏切换demo

    Fragment的概念在Android 3.0(API级别11)引入,为开发者提供了更大的灵活性来设计多屏幕应用,特别是在处理横竖屏切换时。本项目"fragment横竖屏切换demo"是一个实际操作的例子,展示了如何利用Fragment来实现横竖...

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

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

    android横竖屏切换

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

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

    理解Fragment的生命周期、如何在Activity中添加和管理Fragment,以及如何处理横竖屏切换时的状态保存,是每个Android开发者必须掌握的基本技能。在实际项目中,还需要注意性能优化和用户体验,确保应用在各种场景下...

    Android应用源码之(横竖屏切换处理).zip

    本资源“Android应用源码之(横竖屏切换处理).zip”提供了相关的源码示例,旨在帮助开发者理解和掌握如何处理横竖屏切换时的问题。 在Android系统中,横竖屏切换默认会导致Activity重建,这可能导致UI布局的改变和...

    android_横竖屏切换demo

    在Android开发中,横竖屏切换是常见的需求,尤其在设计多样的用户界面和优化用户体验时。本示例"android_横竖屏切换demo"旨在教你如何在Android应用中实现屏幕方向的自由转换,包括从横屏切换到竖屏以及从竖屏返回横...

    android 横竖屏切换的处理

    - 当`android:configChanges`被设置后,应用需要在Activity中重写`onConfigurationChanged(Configuration newConfig)`方法,以处理横竖屏切换。在这里,可以判断`newConfig.orientation`来区别当前屏幕方向,并相应...

    Android中WebView播放网上视频,横竖屏切换

    下面我们将详细讨论如何在Android的WebView中播放网上视频,并处理横竖屏切换。 首先,我们需要了解WebView的基本用法。在XML布局文件中添加WebView组件,并在对应的Activity或Fragment中初始化并加载网页: ```...

    安卓 横竖屏切换源程序

    这个“安卓横竖屏切换源程序”应该包含了一些处理横竖屏切换的核心代码和示例。开发者可以参考这些代码,根据自己的应用需求进行调整和集成。例如,你可能需要在特定条件下切换屏幕方向,或者在横竖屏间切换时有特定...

    Android横竖屏切换

    - 在Android项目中,为了处理横竖屏切换,开发者通常会在`res`目录下创建`layout-land`和`layout-port`两个子目录。`layout-land`用于放置横屏布局文件,而`layout-port`用于放置竖屏布局文件。这两个目录下的布局...

    android横竖屏切换总结

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

    Fragment实现横竖屏布局

    Fragment的设计使得应用在不同设备和屏幕尺寸上表现得更加灵活,尤其在处理横竖屏切换时,可以实现不同布局的适配。在本案例中,“Fragment实现横竖屏布局”主要是指如何利用Fragment来设计适应横竖屏切换的应用界面...

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

    本文主要探讨了如何处理横竖屏切换以及对应的布局加载策略。 首先,横竖屏切换会导致界面布局的变化,因为横屏和竖屏的屏幕尺寸不同。为解决这个问题,Android提供了两种主要方法: 1. 自动切换布局:在`res`目录...

Global site tag (gtag.js) - Google Analytics