在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity

系统会杀死Activity

12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onPause
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onStop
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onDestroy

并重新启动Activity
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate 上次看到了223页
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onStart
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onRestoreInstanceState 上次看到了223页
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onResume


当横竖屏切换的时候,系统会杀死Activity并重新启动Activity,这是不合理的,但是安卓系统默认就是这样设计的

解决Activity横竖屏切换不杀死Activity 不重新启动Activity,只需在Activity节点中添加 android:configChanges="orientation|keyboardHidden|screenSize" 即可

<activity android:name=".temp_data.TempDataActivity"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>

监听横竖屏切换,为什么要监听横竖屏切换呢,因为有这样的需求:竖屏显示界面 和 横屏显示界面不一样

需要在Activity重写以下方法,即可监听横竖屏切换:

  /**
* 需要在Activity节点设置android:configChanges="orientation|keyboardHidden|screenSize"
* 横竖屏切换才会调用此方法,进行监听
* @param newConfig
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 获取到屏幕的方向
int orientation = newConfig.orientation;
switch (orientation) { // 横屏
case Configuration.ORIENTATION_LANDSCAPE:
setContentView(R.layout.activity_temp_data_horizontal);
break; // 竖屏
case Configuration.ORIENTATION_PORTRAIT:
setContentView(R.layout.activity_temp_data);
break;
}
}

activity_temp_data.xml (横屏需要的布局文件)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是竖屏"
android:textSize="40dp"
android:layout_centerInParent="true"
/> </RelativeLayout>

activity_temp_data_horizontal.xml (竖屏需要的布局文件)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是横屏,我很宽我很宽"
android:textSize="40dp"
android:layout_centerInParent="true"
/> </RelativeLayout>

效果:

在开发中,如果需求没有明确要指定 横屏 或 竖屏,可以直接把屏幕方向定死为 竖屏  android:screenOrientation="portrait",这样可以减少很多不必要带来的麻烦和Bug

Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换的更多相关文章

  1. Android OkHttp文件上传与下载的进度监听扩展

    http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...

  2. C#监听锁屏代码

    今天,偶然间在技术群看有人问,怎么监听锁屏. 在此处记录一下 public class Constrctor { public Constrctor() { SystemEvents.SessionS ...

  3. android应用锁之监听应用前后台切换方式

    今天在做技术总结,顺便就把知识共享,个人崇尚分享. 通过以下方式来监听是不是发生了应用的前后台切换: 1. android api 10 – 15 通过ActivityManager register ...

  4. Android 监听锁屏、解锁、开屏 操作

    1.首先定义 ScreenListener  package com.app.lib; import android.content.BroadcastReceiver; import android ...

  5. Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)

    1    MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...

  6. Android点击Button按钮的四种事件监听方法总结

    首先我们在activity_main.xml里面先定义一个Button空间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <RelativeLayout xmlns:a ...

  7. Android耳机线控具体解释,蓝牙耳机button监听(仿酷狗线控效果)

    转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后.Android系统会发出一个广播.该 ...

  8. Android开发笔记(11)——DialogFragment & 点击监听

    转载请注明:http://www.cnblogs.com/igoslly/p/6931519.html DialogFragment使用 & 点击监听 /* DialogFragment是用于 ...

  9. 监听浏览器tab切换

    监听浏览器切屏 为了完成验证用户在切换浏览器tab时进行登录再次认证需求需要监听浏览器切换窗口 if (document.hidden !== undefined) { document.addEve ...

随机推荐

  1. SpringBoot核心

    1.基本配置 1.1入口类和@SrpingBootApplication SpringBoot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的 ...

  2. winform频繁刷新导致界面闪烁解决方法

    转自龙心文 原文 winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供 ...

  3. jquery 三元运算

    三元运算: 条件  ? 条件为真取此值 : 条件为假取此值; var v = $(:check).prop('checked')?faule:true; $(:check).prop('checked ...

  4. Python shutil 模块学习笔记

    学于https://automatetheboringstuff.com shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来 ...

  5. Elasticsearch前沿:ES 5.x改进详解与ES6展望

    转:http://www.dataguru.cn/article-11094-1.html 曾勇(Medcl),Elastic 工程师与布道师,2015 年加入 Elastic 公司.加入 Elast ...

  6. HP发送HTTP POST请求 返回结果

    HP发送HTTP POST请求 返回结果 <?php $srv_ip = '192.168.10.188';//你的目标服务地址或频道.$srv_port = 80;$url = '/demo/ ...

  7. 525. Contiguous Array两位求和为1的对数

    [抄题]: Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 ...

  8. spring+springmvc+mybatis+redis实现缓存

    先搭建好redis环境 需要的jar如下: jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:330 ...

  9. 解决VS2013中的控制台一闪而过的问题

    修改项目配置,右键点击项目,在右键菜单中选择属性,然后在弹出的对话框左侧列表中中选择 “配置属性”-->“链接器”-->“系统”,然后在右侧的列表中, 在第一项”子系统“的值中选择”控制台 ...

  10. zookeeper 面试题2 比较乱

    Zookeeper是什么框架分布式的.开源的分布式应用程序协调服务,原本是Hadoop.HBase的一个重要组件.它为分布式应用提供一致性服务的软件,包括:配置维护.域名服务.分布式同步.组服务等.应 ...