本文为大家分享了Android横竖屏切换及其对应布局加载问题,供大家参考,具体内容如下

第一,横竖屏切换连带横竖屏布局问题:

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

可以通过以下两种方法来切换布局:

1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。

2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新加载当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头开始),你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout 。

/** 1:竖屏 2:横屏 判断屏幕以旋转的方向 */

private int orientation;

orientation=getResources().getConfiguration().orientation;

第二,强制设定屏幕的横、竖屏方向:

Android横竖屏切换在手机开发中比较常见,很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常要强制设置横竖屏的方向,通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。

比如下列设置:

横屏显示设置:android:screenOrientation="lanscape"

竖屏显示设置:android:screenOrientation="portrait"

当然上述修改也可以在Java代码中通过代码来实现:(android屏幕的切换会重启Activity,所以在Activity销毁前保存当前活动的状态,并在Activity再次Create的时候载入配置)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

第三,拦截横竖屏切换 需要的配置文件:onConfigurationChanged

Activity每次横竖屏切换都会重新调用onPause->onStop-> onDestory->onCreate->onStart->onResume(为此内容和数据要保存和读取,否则转屏之前的内容就会消失了)

很多时候这样的结果让程序繁琐,为此Android提供了在manifest中设置android:configChanges属性,从而让Activity不延续上述的重建流程;

方式一)在Android工程的Mainfest.xml中配置Activity:android:configChanges="keyboardHidden|orientation,横竖屏切换之后就不会去执行OnCreat函数了,而是会去调用onConfigurationChanged()这样就能控制横竖屏的切换了。

方式二)用户可以在Activity或View的:onConfigurationChanged(Configurationnew   Config)  ,函数中获取当前横竖屏参数。至于其调用顺序跟touch时间的传递顺序相似,不过他没有消费事件的概念,会顺次调用到每一个onConfigurationChanged函数。

需要重写Activity的onConfigurationChanged方法。实现方式如下,不需要做太多的内容:

需要注意的是,onConfigurationChanged函数中只能获得横竖屏切换后的参数,在该函数中获取不到新的Layout和控件的尺寸位置信息,如果要处理尺寸和位置信息,必须通过消息异步或者延时调用;

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

// land do nothing is ok

} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

// port do nothing is ok

}

}

第四,自适应切换屏幕:

如果想让它启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示,然后手机切换横竖屏就不能用了该怎么解决呢?

首先:在Mainfest.xml中追加android:screenOrientation="sensor" android:configChanges="orientation|keyboardHidden"

然后:取得屏幕的长和宽,进行比较设置横竖屏的变量。

Display display = getWindowManager().getDefaultDisplay();

int width = display.getWidth();

int height = display.getHeight();

if (width > height) {

orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; // 横屏

} else {

orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; // 竖屏

}

然后:在onConfigurationChanged()函数中追加this.setRequestedOrientation(orientation)

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

this.setRequestedOrientation(orientation);

}

但是这样的话你切到别的画面的时候再回到原画面,它就仍然是横的或者是纵的。怎么让它从别的屏幕回来后,又重新横竖屏布局呢?

只要在OnResume()中在设定下就行了,但是这个仅仅只是支持横竖屏只有一个layout的;

protected void onResume() {

orientation = ActivityInfo.SCREEN_ORIENTATION_USER;

this.setRequestedOrientation(orientation);

Display display = getWindowManager().getDefaultDisplay();

int width = display.getWidth();

int height = display.getHeight();

if (width > height) {

orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;

} else {

orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

}

super.onResume();

}

有三点请注意:

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

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

本文地址: http://www.cppcns.com/ruanjian/android/225261.html

android 图片横竖判断_Android横竖屏切换及其对应布局加载问题详解相关推荐

  1. hql懒加载后判断对象是否存在_hibernate延迟加载(懒加载)详解

    延迟加载 一.什么是懒加载?他的作用? 延迟加载,也叫懒加载,它是Hibernate为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建. Hibernate中主要是通过代理(pr ...

  2. 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )

    文章目录 一. 博客相关资料 及 下载地址 1. 代码查看方法 ( ① 直接获取代码 | ② JAR 包替换 ) 2. 本博客涉及到的源码查看说明 二. Activity 生命周期回调机制 1. An ...

  3. Fresco最强图片加载框架详解及使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请标明出处:http://blog.csdn.net/android_ls/article/details/53137867 Fresco是F ...

  4. android 动态水球,Canvas 制作动态进度加载水球详解及实例代码

    Canvas 动态进度加载水球 前言 之前看到一些球型的动态加载的效果,一直想自己动手做一个,正好这段时间重温了一个Canvas,所以就尝试了一下. 实现思路 关于水波的实现,使用了sin()函数,通 ...

  5. android 【禁止横屏和竖屏切换】

    android [禁止横屏和竖屏切换] 相关搜索: android android [禁止横屏和竖屏切换] 在某些场合可能需要禁止横屏和竖屏切换,实现这个要求很简单,只要在AndroidManifes ...

  6. 【胖虎的逆向之路】02——Android整体加壳原理详解实现

    [胖虎的逆向之路](02)--Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录 [胖虎的逆向之路](02)--Android整体加壳原理详解& ...

  7. Android自动化测试环境部署及adb sdkmanager avdmanager Monitor DDMS工具使用及命令详解

    环境部署及工具使用 系列文章 前言 环境部署 硬件环境 软件环境 ADB工具 adb组成 adb命令 android命令 sdkmanager 命令 avdmanager命令 管理模拟器 monito ...

  8. Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解

    Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解 目录 Android AR开发实践之七:OpenGLES相机预览背景绘制源码详解 一.OpenGL ES渲染管线 1.基本处 ...

  9. cesium 切换瓦片地图的加载方式

    cesium 切换瓦片地图的加载方式 如果你熟悉 cesium,那么你或多或少应该用过或者了解如何用 cesium 加载瓦片地图. 熟悉加载瓦片地图这本身不是一个太难的工作,一般来说,只要你照着官方的 ...

最新文章

  1. postgre sql 括字段_SQL-约束(cnostraints)
  2. php grid 分页,jqGrid实现前端分页
  3. 卷积的物理意义(经典)
  4. C#环境下使用Windows消息传递字符串数据的研究
  5. mysqlbinlog查看 binlog日志报错mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
  6. MySQL数据库常见的几个问题
  7. Abstract Self-Balancing Binary Search Tree
  8. spring security4 问题
  9. mybatis 关联查询 延迟加载
  10. 为什么需要使用Git客户端?
  11. 国内网络游戏企业的困境和出路
  12. 基于STM32的频率计Proteus仿真教程
  13. Vue 上传图片裁剪
  14. linux原子锁原理,了解Linux的锁与同步、原子加(atomic_add)
  15. 新能源车牌识别技术发展到哪一步了?
  16. win7删除桌面计算机图标怎么删除,Win7桌面图标箭头怎么去掉?去掉桌面图标箭头的方法...
  17. BZOJ.4453.cys就是要拿英魂!(后缀数组 单调栈)
  18. c语言香农编码文件压缩,谈谈熵编码无损压缩的原理
  19. USB OTG(Host) 、 USB ADB(Device)、DWC3 Charge
  20. ssm基于微信小程序的游泳馆管理系统 uinapp 计算机毕业设计

热门文章

  1. 开发工具之Eclipse快捷键
  2. 腾讯云python环境_腾讯云centos6.5 搭建python机器学习环境
  3. linux远程安装本机软件,我的电脑怎样让对方远程装软件?
  4. 教程:1、Linux简介
  5. 【PHPMailer】写一封邮件
  6. 下面关于表单的叙述错误的是_下面是关于表单数据环境的叙述,其中错误的是A.可以在数据环境中加入与表单操作有关的表B.数据环...
  7. win10和win7游戏测试软件,是时候和Win7说再见了!Win10游戏性能最多领先50%
  8. build怎么调试 react_GitHub - bozhouyongqi/debug-react: 本地调试react源码环境
  9. excel粘贴时出现故障_了解这些信息,你会知道在ESXi5.0 的虚拟化系统下文件出现故障时,我们能做些什么?...
  10. matlab textsac函数,哈工大-Matlab--2013年春季学期《MATLAB语言及应用》试题