




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android 横竖屏切换总结 AndroidAndroid 横竖屏切换总结横竖屏切换总结 Android 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 1 if this getResources getConfiguration orientation Configuration ORIENTATION LANDSCAPE 2 Log i info landscape 横屏 3 4 else if this getResources getConfiguration orientation Configuration ORIENTATION PORTRAIT 5 Log i info portrait 竖屏 6 在 onConfigurationChanged 方法中也可以检测拥有硬键盘的键盘状 态 1 检测实体键盘的状态 推出或者合上 2 if newConfig hardKeyboardHidden Configuration HARDKEYBOARDHIDDEN NO 3 实体键盘处于推出状态 在此处添加额外的处理代码 4 5 else if newConfig hardKeyboardHidden Configuration HARDKEYBOARDHIDDEN YES 6 实体键盘处于合上状态 在此处添加额外的处理代码 7 2 重新载入问题 如果不需要从新载入 可以在 AndroidManifest xml 中加入配置 android configChanges orientation keyboardHidden 配置 android configChanges 的作用就是如文档所说的 Specify one or more configuration changesthat the activity will handle itself If not specified the activity will berestarted if any of these configuration changes happen in the system 这样在程序中 Activity 就不会重复的调用 onCreate 甚至不会调用 onPause onResume 只会调用一个 onConfigurationChanged Configuration newConfig 如果需要重新 载入 则不需要做任何修改 不过如果需要在重新载入过程中保存之 前的操作内容或数据 则需要保存之前的数据 然后在 activity 的 onCreate 中取出来 当然 如此就不能设置 android configChanges 了 否则就不会调用 onCreate 方法 如果要彻底禁止翻转 可以设置 android screenOrientation 的属性 为 nosensor 如此就可以忽略重力感应带来的麻烦了 不过在模拟器 上不管用 在真机上是正确的 android screenOrientation portrait 则无论手机如何变动 拥有这个属性的 activity 都将是竖屏显示 android screenOrientation landscape 为横屏显示 这里提一个小知识 Android 模拟器中 快捷键 Ctrl F11 F12 可以 实现转屏 AndroidAndroid 横屏竖屏切换的问题横屏竖屏切换的问题 一 禁止横竖屏转换一 禁止横竖屏转换 Android 横竖屏切换在手机开发中比较常见 很多软件在开发过程中为了避免横竖屏切换 时引发不必要的麻烦 通常禁止掉横竖屏的切换 通过在 AndroidManifest xml 中设置 activity 中的 android screenOrientation 属性值来实现 比如下列设置 android screenOrientation portrait 则无论手机如何变动 拥有这个属性的 activity 都将是竖屏显示 android screenOrientation landscape 为横屏显示 上述修改也可以在 Java 代码中通过类似如下代码来设置 setRequestedOrientation ActivityInfo SCREEN ORIENTATION LANDSCAPE 另外 android 中每次屏幕的切换动会重启 Activity 所以应该在 Activity 销毁前保存当前 活动的状态 在 Activity 再次 Create 的时候载入配置 那样 进行中的游戏就不会自动重 启了 二 横竖屏切换 如果要让软件在横竖屏之间切换 由于横竖屏的高宽会发生转换 有可能会要求不同的布 局 可以通过以下两种方法来切换布局 1 在 res 目录下建立 layout land 和 layout port 目录 相应的 layout 文件名不变 比如 main xml layout land 是横屏的 layout layout port 是竖屏的 layout 其他的不用管 横竖 屏切换时程序为调用 Activity 的 onCreate 方法 从而加载相应的布局 2 假如布局资源不按照如上设置 则可以通过 java 代码来判断当前是横屏还是竖屏然后 来加载相应的 xml 布局文件 因为当屏幕变为横屏的时候 系统会重新呼叫当前 Activity 的 onCreate 方法 你可以把以下方法放在你的 onCreate 中来检查当前的方向 然后可以让你的 setContentView 来载入不同的 layout xml if this getResources getConfiguration orientation Configuration ORIENTATION LAN DSCAPE Log i info landscape 横屏 elseif this getResources getConfiguration orientation Configuration ORIENTATIO N PORTRAIT Log i info portrait 竖屏 三 通过三 通过 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 ConfigurationnewConfig 函数中获取当前横竖屏参数 至于其调 用顺序跟 touch 时间的传递顺序相似 不过他没有消费事件的概念 会顺次调用到每一个 onConfigurationChanged 函数 需要重写 Activity 的 onConfigurationChanged 方法 实现方式如下 不需要做太多的内容 Override public voidonConfigurationChanged Configuration newConfig super onConfigurationChanged newConfig if this getResources getConfiguration orientation Configuration ORIENTATION LANDSCAPE land donothing is ok else if this getResources getConfiguration orientation Configuration ORIENTATION PORTRAIT port donothing is ok 需要注意的是 onConfigurationChanged 函数中只能获得横竖屏切换后的参数 在该函数 中获取不到新的 Layout 和控件的尺寸位置信息 如果要处理尺寸和位置信息 必须通过消 息异步或者延时调用 四 彻底禁止翻转四 彻底禁止翻转 当然如果要彻底禁止翻转 可以设置 android screenOrientation 的属性为 nosensor 如此 就可以忽略重力感应带来的麻烦了 不过在模拟器上不管用 在真机上是正确的 这里提一个小知识 Android 模拟器中 快捷键 Ctrl F11 F12 可以实现转屏 五 自适应转换五 自适应转换 如果想让它启动的时候是横屏的话就横屏表示 纵屏的话就纵屏表示 然后手机切换横竖 屏就不能用了该怎么解决呢 首先 在 Mainfest xml 中追加 android screenOrientation sensor android configChanges orientation keyboardHidden 这两个属性 第二步 取得屏幕的长和宽 进行比较设置横竖屏的变量 1 Display display getWindowManager getDefaultDisplay 2 int width display getWidth 3 int height display getHeight 4 if width height 5 orientation ActivityInfo SCREEN ORIENTATION LANDSCAPE 横屏 6 else 7 orientation ActivityInfo SCREEN ORIENTATION PORTRAIT 竖屏 8 第三步 在 onConfigurationChanged 函数中追加 this setRequestedOrientation orientation 就行了 1 public void onConfigurationChanged Configuration newConfig 2 super onConfigurationChanged newConfig 3 this setRequestedOrientation orientation 4 但是这样的话你切到别的画面的时候再回到原画面 它就仍然是横的或者是纵的 怎么让 它从别的屏幕回来后 又重新横竖屏布局呢 只要在 OnResume 中在设定下就行了 但是这个只支持横竖屏只有一个 layout 的 横竖 屏分别对应 layout 的还不知道该怎么解决 1 protected void onResume 2 orientation ActivityInfo SCREEN ORIENTATION USER 3 this setRequestedOrientation orientation 4 Display display getWindowManager getDefaultDisplay 5 int width display getWidth 6 int height display getHeight 7 if width height 8 orientation ActivityInfo SCREEN ORIENTATION LANDSCAPE 9 else 10 orientation ActivityInfo SCREEN ORIENTATION PORTRAIT 11 12 super onResume 13 六 总结六 总结 总之 对于横竖屏切换的问题 统计了下 大家的解决办法是 不理会 只竖屏显示 android screenOrientation portrait 只横屏显示 android screenOrientation landscape 简单的防止重载 在 AndroidManifest xml 中加入 android configChanges orientation keyboardHidden 在 activity 中重载 onConfigurationChanged 事件 Override publicvoid onConfigurationChanged Configuration config super onConfigurationChanged config 横竖屏分别布局 横竖屏分别布局的方法是 在 res 下新建 layout land 横屏 layout port 竖屏 然后把 layout 中的 xml 文件分别考到以上目录 修改布局就可以了代码中不做任何更改 在 AndroidManifest xml 文件中的主 Activity 中加入 android configChanges orientation keyboardHidden 然后在主 Activity 中的 onConfigurationChanged 加入 Override public void onConfigurationChanged Configuration config super onConfigurationChanged config if config orientation Configuration ORIENTATION PORTRAIT setContentView R layout main 布局 tv TextView findViewById R id EditText01 控件 if config orientation Configuration ORIENTATION LANDSCAPE setContentView R layout main 布局 tv TextView findViewById R id EditText01 控件 七 示例详细步骤七 示例详细步骤 第一步 获得许可第一步 获得许可 需要在中添加相应许可 第二步 根据不同的目标 针对第二步 根据不同的目标 针对 Activity 进行设置进行设置 目标目标 1 屏蔽横竖屏的切换屏蔽横竖屏的切换 步骤 为 Activity 设置一个默认的屏幕方向方法如下 在 AndroidManifest xml 中找到该 Activity 添加代码 android name ActivityName android screenOrientation landscape 设置 Activity 的默认方向为 横向 此处的 screenOrientation 有如下选项 unspecified 默认值 由系统判断状态自动切换 landscape 横屏 portrait 竖屏 user 用户当前设置的 orientation 值 behind 下一个要显示的 Activity 的 orientation 值 sensor 使用传感器 传感器的方向 nosensor 不使用传感器 基本等同于 unspecified 目标目标 2 防止 防止 Activity 的销毁的销毁 步骤 为 Activity 设置 configChanges 属性 在 AndroidManifest xml 中找到该 Activity 添加代码 android name ActivityName android configChanges orientation keyboardHidden 此处的 configChanges 有如下选项 orientation 屏幕在纵向和横向间旋转 keyboardHidden 键盘显示或隐藏 fontScale 用户变更了首选的字体大小 locale 用户选择了不同的语言设定 keyboard 键盘类型变更 例如手机从 12 键盘切换到全键盘 touchscreen 或 navigation 键盘或导航方式变化 一般不会发生这样的事件 如果需要多个选项用 隔开 此处注意 如果是在实体机上测试横竖屏切换需要 orientation 选项 重点 如果要使得程序可以在 Android 模拟器上测试需要写 orientation keyboardHidden 如果缺少了 keyboardHidden 选项不能防止 Activity 的销毁 并且在之后提到的 onConfigurationChanged 事件中只能捕获竖屏变横屏的事件 不能捕获 横屏变竖屏 目标目标 3 捕获横竖屏切换的事件 捕获横竖屏切换的事件 步骤 在 Activity 中 ActivityName java 重写 onConfigurationChanged 事件 Override public void onConfigurationChanged Configuration newConfig TODO Auto generated method stub super onConfigurationChanged newConfig switch newConfig orientation 更改为 LANDSCAPE case Configuration ORIENTATION LANDSCAPE 如果转换为横向屏时 有要做的事 请写在这里 break 更改为 PORTRAIT case Configuration ORIENTATION PORTRAIT 如果转换为竖向屏时 有要做的事 请写在这里 break 八 备注 八 备注 1 不设置 Activity 的 android configChanges 时 切屏会重新调用各个生命周期 切横屏 时会执行一次 切竖屏时会执行两次 2 设置 Activity 的 android configChanges orientation 时 切屏还是会重新调用各个生 命周期 切横 竖屏时只会执行一次 3 设置 Activity 的 android configChanges orientation keyboardHidden 时 切屏不会重 新调用各个生命周期 只会执行 onConfigurationChanged 方法 AndroidAndroid 系统下横屏竖屏切换功能的实现系统下横屏竖屏切换功能的实现 一 不同的一 不同的 layout Android 手机屏幕大小不一 有 480 x320 640 x360 800 x480 怎样才能让 App 自动适应不 同的屏幕呢 其实很简单 只需要在 res 目录下创建不同的 layout 文件夹 比如 layout 640 x360 layout 800 x480 所有的 layout 文件在编译之后都会写入 R Java 里 而系统会根据屏幕的大小自 己选择合适的 layout 进行使用 二 二 hdpi mdpi ldpi 在之前的版本中 只有一个 drawable 而 2 1 版本中有 drawable mdpi drawable ldpi drawable hdpi 三个 这三个主要是为了支持多分辨率 drawable hdpi drawable mdpi drawable ldpi 的区别 1 drawable hdpi 里面存放高分辨率的图片 如 WVGA 480 x800 FWVGA 480 x854 2 drawable mdpi 里面存放中等分辨率的图片 如 HVGA 320 x480 3 drawable ldpi 里面存放低分辨率的图片 如 QVGA 240 x320 系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片 三 横屏竖屏三 横屏竖屏 在开发程序时为了兼容不同平台不同屏幕 建议各自文件夹根据需求均存放不同版本图片 以下步骤是网上流传的 不过我自己之前是通过图形化界面实现这个配置 算是殊途同归 有空我会把图片贴上来 还要说明一点 每个 activity 都有这个属性 screenOrientation 每个 activity 都需要设置 可以设置为竖屏 portrait 也可以设置为无重力感应 nosensor 要让程序界面保持一个方向 不随手机方向转动而变化的处理办法 在 AndroidManifest xml 里面配置一下就可以了 加入这一行 android screenOrientation landscape 例如 landscape 是横向 portrait 是纵向 Java 代码代码 另外 android 中每次屏幕的切换动会重启 Activity 所以应该在 Activity 销毁前保存当前 活动的状态 在 Activity 再次 Create 的时候载入配置 那样 进行中的游戏就不会自动重 启了 有的程序适合从竖屏切换到横屏 或者反过来 这个时候怎么办呢 可以在配置 Activity 的地方进行如下的配置 android screenOrientation portrait 这样就可以保证是竖屏总是 竖屏了 或者 landscape 横向 而有的程序是适合横竖屏切换的 如何处理呢 首先要在配置 Activity 的时候进行如下的 配置 android configChanges keyboardHidden orientation 另外需要重写 Activity 的 onConfigurationChanged 方法 实现方式如下 不需要做太多的内容 Override public void onConfigurationChanged Configuration newConfig super onConfigurationChanged newConfig if this getResources getConfiguration orientation Configuration ORIENTATION LANDSCAPE land do nothing is ok else if this getResources getConfiguration orientation Configuration ORIENTATION PORTRAIT port do nothing is ok 1 总体来说有两种方案 1 Android 系统自动切换 利用 Android 系统每次屏幕切换会重启 Activity 的特性 在 OnCreat 处自动加载不同显示 状态下的 layout 例 main xml 是竖屏状态下的 layout 文件保存于 res layout 文件夹中 为实现横屏切 换 建立文件夹 res layout land 在里面创建新的界面文件 main xml 与 res layout 文件 夹中文件同名 则当设备由竖屏切换到横屏 或者反之时 在 onCreate 函数中直接执行 setContentView R layout main 即可自动加载不同的界面文件 另外 在 res layout land 中建立同名文件是用系统自动判断加载 也可以手动判断加载 如在 res layout 文件夹中有竖屏界面 main P xml 及横屏界面 main L xml 则可以在 onCreate 函数中通过判断横竖屏状态以显式加载不同界面 代码 int mCurrentOrientation getResources getConfiguration orientation if mCurrentOrientation Configuration ORIENTATION PORTRAIT If current screen isportrait setContentView R layout main P else if mCurrentOrientation Configuration ORIENTATION LANDSCAPE If current screen islandscape setContentView R layout main L 由于 android 系统屏幕切换会重启 Activity 所以应该在 Activity 销毁前保存当前活动的状 态 在 Activity 再次 Create 的时候载入配置 2 利用 Activity 的 onConfigurationChanged 方法手动切换 为避免 Android 系统自动重启 activity 需要在 Androidmanifest xml 中相应 Activity 加上 android configChanges keyboardHidden orientation 属性 使相应的 Activity 不重启而是 调用 onConfigurationChanged ConfigurationnewConfig 例 res layout 下有竖屏界面 main P xml 及横屏界面 main L xml onCreate 时同理判 断以显示不同的界面 Override protectedvoid onCreate Bundle icicle super onCreate icicle int mCurrentOrientation getResources getConfiguration orientation if mCurrentOrientation Configuration ORIENTATION PORTRAIT Ifcurrent screen is portrait setContentView R layout main P else if mCurrentOrientation Configuration ORIENTATION LANDSCAPE Ifcurrent screen is landscape setContentView R layout main L init 初始化 赋值等操作 findViews 获得控件 setListensers 设置控件的各种监听方法 重载 onConfigurationChanged Override publicvoid onConfigurationChanged Configuration newConfig super onConfigurationChanged newConfig int mCurrentOrientation getResources getConfiguration orientation if mCurrentOrientation Configuration ORIENTATION PORTRAIT If current screen isportrait setContentView R layout main P 注意 这里删除了 init 否则又初始化了 状态就丢失 findViews setListensers else if mCurrentOrientation Configuration ORIENTATION LANDSCAPE If current screen islandscape setContentView R layout main L 注意 这里删除了 init 否则又初始化了 状态就丢失 findViews setListensers 以上代码中需要注意 init 函数 若需要保存其它的状态 如 Button 及各种 View 的显示 文字已经改变 在 setListensers 务必进行恢复操作 同样 也可以使用 res layout main xml 和 res layout land main xml 方式 则不需判断 直接使用 setContentView R layout main 即可 看代码 Override protectedvoid onCreate Bundle icicle super onCreate icicle setContentView R layout main init 初始化 赋值等操作 findViews 获得控件 setListensers 设置控件的各种监听方法 重载 onConfigurationChanged Override publicvoid onConfigurationChanged Configuration newConfig super onConfigurationChanged newConfig int mCurrentOrientation getResources getConfiguration orientation if mCurrentOrientation Configuration ORIENTATION PORTRAIT If current screen isportrait setContentView R layout main 注意 这里删除了 init 否则又初始化了 状态就丢失 findViews setListensers else if mCurrentOrientation Configuration ORIENTATION LANDSCAPE If current screen islandscape setContentView R layout main 注意 这里删除了 init 否则又初始化了 状态就丢失 findViews setListensers 其实在这种模式下 由于 Android 系统自动寻找不同界面文件 而 Androidmanifest xml 中已定义了 android configChanges keyboardHidden orientation 只监听方向改变 因此 onConfigurationChanged 方法还可以继续精简 除非在横竖屏下状态不同 直接设置 界面 恢复状态即可 Override publicvoid onConfigurationChanged Configuration newConfig super onConfigurationChanged newConfig setContentView R layout main 注意 这里删除了 init 否则又初始化了 状态就丢失 findViews setListensers 体验新版博客 2 横竖屏切换的响应 如果没有设置强制横屏或者竖屏那么每次横竖屏切换的时候 Activity 都会被重新创建 一次 这样就会存在一个问题横屏后会把图片拉伸可能在竖屏时感觉很协调的界面切换到 横屏以后会被拉伸的很难看 比较好的解决办法是为横竖屏做两套图做两个布局文件 这 样子程序中只需要监听屏幕切换的结果设置不同的布局 绘制不同的图片即可 AndroidManifest xml 中设置属性禁止重新创建 Activity 并且添加屏幕切换监听 复制代码 设置后屏幕切换后就不会再次调用 OnCreate 方法重新创建这个 Activity 切换屏幕之前 程序中的一些数据或者内容就不会因为重新创建 Activity 导致重置清空 每当切换横竖屏 的时候系统会自己调用 onConfigurationChanged 方法这样子就可以拿到当前屏幕的横竖 屏状态 根据状态就可以做我们想做的事 import android app Activity import android content res Configuration import android os Bundle public class HandlerActivity extends Activity Override protected voidonCreate Bundle savedInstanceState setContentView R layout handler super onCreate savedInstanceState Override public voidonConfigurationChanged Configuration newConfig int type this getResources getConfiguration orientation if type Configuration ORIENTATION LANDSCAPE 切换到了横屏 else if type Configuration ORIENTATION PORTRAIT 切换到了竖屏 super onConfigurationChanged newConfig 3 一 不同的一 不同的 layout Android 手机屏幕大小不一 有 480 x320 640 x360 800 x480 怎样才能让 App 自动适应不 同的屏幕呢 其实很简单 只需要在 res 目录下创建不同的 layout 文件夹 比如 layout 640 x360 layout 800 x480 所有的 layout 文件在编译之后都会写入 R Java 里 而系统会根据屏幕的大小自 己选择合适的 layout 进行使用 二 二 hdpi mdpi ldpi 在之前的版本中 只有一个 drawable 而 2 1 版本中有 drawable mdpi drawable ldpi drawable hdpi 三个 这三个主要是为了支持多分辨率 drawable hdpi drawable mdpi drawable ldpi 的区别 1 drawable hdpi 里面存放高分辨率的图片 如 WVGA 480 x800 FWVGA 480 x854 2 drawable mdpi 里面存放中等分辨率的图片 如 HVGA 320 x480 3 drawable ldpi 里面存放低分辨率的图片 如 QVGA 240 x320 系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片 三 横屏竖屏三 横屏竖屏 在开发程序时为了兼容不同平台不同屏幕 建议各自文件夹根据需求均存放不同版本图片 以下步骤是网上流传的 不过我自己之前是通过图形化界面实现这个配置 算是殊途同归 有空我会把图片贴上来 还要说明一点 每个 activity 都有这个属性 screenOrientation 每个 activity 都需要设置 可以设置为竖屏 portrait 也可以设置为无重力感应 nosensor 要让程序界面保持一个方向 不随手机方向转动而变化的处理办法 在 AndroidManifest xml 里面配置一下就可以了 加入这一行 android screenOrientation landscape 例如 landscape 是横向 portrait 是纵向 Java 代码代码 另外 android 中每次屏幕的切换动会重启 Activity 所以应该在 Activity 销毁前保存当前 活动的状态 在 Activity 再次 Create 的时候载入配置 那样 进行中的游戏就不会自动重 启了 有的程序适合从竖屏切换到横屏 或者反过来 这个时候怎么办呢 可以在配置 Activity 的地方进行如下的配置 android screenOrientation portrait 这样就可以保证是竖屏总是 竖屏了 或者 landscape 横向 而有的程序是适合横竖屏切换的 如何处理呢 首先要在配置 Activity 的时候进行如下的 配置 android configChanges keyboardHidden orientation 另外需要重写 Activity 的 onConfigurationChanged 方法 实现方式如下 不需要做太多的内容 Override public void onConfigurationChanged Configuration newConfig super onConfigurationChanged newConfig if this getResources getConfiguration orientation Configuration ORIENTATION LANDSCAPE land do nothing is ok else if this getResources getConfiguration orientation Configuration ORIENTATION PORTRAIT port do nothing is ok AndroidAndroid 横竖屏切换相关总结横竖屏切换相关总结 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 而竖屏转横屏时他只调 用一次 on
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家政服务企业质量标准建设指南
- 前台服务教学课件
- 小学数学创新教学方案研究
- (2025年标准)搭乘安全协议书
- 剃刀理发专业知识培训课件
- 刹车油知识培训课件
- 江西现代职业技术学院《柏拉图导读》2024-2025学年第一学期期末试卷
- 冷库修理知识培训内容课件
- 长春金融高等专科学校《金融衍生工具》2024-2025学年第一学期期末试卷
- 券商合规培训课件
- 社区工作者经典备考题库(必背300题)
- 2020数学花园探秘决赛三四年级A卷
- 标准工程签证单表格
- 幼儿园绘本故事:《罗伯生气了》 课件
- 开具生效证明申请书(申请开具生效证明用)
- 北师大版九年级物理全一册教案(完整版)教学设计含教学反思
- GB 9706.218-2021 医用电气设备 第2-18部分:内窥镜设备的基本安全和基本性能专用要求
- 石油专业英语(钻井)
- 教练技术一阶段讲义(共59页)
- 物流公司财务管理制度
- 卫生监督执法约谈通知书
评论
0/150
提交评论