Android Activity 重载 onConfigurationCangerd之屏幕方向改变

2023-05-16

一、onConfigurationChanged 触发时机
onConfigurationChanged 事件不只是屏幕方向改变才触发,其他一些系统设置改变也可以触发,例如:打开软件盘、屏幕旋转。

捕获事件的前提——权限声明
1 获取配置信息的改变需要声明权限。

 <uses-permission Android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>

2 声明activity要捕获的事件类型

<activity Android:configChanges="orientation|keyboard"> ●●●●●● </activity> 

声明Android:configChanges 属性,规定我们可以在程序中捕获到的事件类型,多个事件使用 | 分隔。

注意:如果没有 orientation 属性,程序是无法捕获到屏幕改变的事件的。

三、配置改变的处理

重写Activity中的onConfigurationChanged方法。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
        //TODO 某些操作} 
        super.onConfigurationChanged(newConfig); 
    }
}

四、 android:configChanges 可选属性

android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "screenSize", "smallestScreenSize"]

五、 ActivityInfo 常量

Constant Value
CONFIG_DENSITY
CONFIG_FONT_SCALE
CONFIG_KEYBOARD
CONFIG_KEYBOARD_HIDDEN
CONFIG_LAYOUT_DIRECTION
CONFIG_LOCALE
CONFIG_MCC
CONFIG_MNC
CONFIG_NAVIGATION可以自己处理导航类型的更改64 (0x00000040)
CONFIG_ORIENTATION设备旋转,横向显示和竖向显示模式切换。128 (0x00000080)
CONFIG_SCREEN_LAYOUT指示该活动可以自己处理屏幕布局的更改256 (0x00000100)
CONFIG_SCREEN_SIZE指示该活动可以自己处理屏幕大小1024 (0x00000400)
CONFIG_SMALLEST_SCREEN_SIZE表示该活动可以自己处理最小的屏幕大小2048 (0x00000800)
CONFIG_TOUCHSCREEN指示活动可以自己处理触摸屏类型的更改8 (0x00000008)
CONFIG_UI_MODE指示活动可以自己处理用户界面模式512 (0x00000200)

六、新问题
但是,自从Android3.2(API13),在设置Activity的
android:configChanges=“orientation|keyboardHidden"后,一样会重新调用各个生命周期。
因为screen size也开始跟着设备的横竖切换而改变。
所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation”
你还必须设置"ScreenSize"。
解决方法:
AndroidManifest.xml中设置android:configChanges="orientation|screenSize“

七、设置屏幕方向
android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity 再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了

在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入
android:screenOrientation=”landscape”属性即可
(landscape是横向,portrait是纵向)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Activity 重载 onConfigurationCangerd之屏幕方向改变 的相关文章

  • 按主题更改 ActionBar 的高度

    我想删除 ActionBar 下面的阴影 我知道我需要将高度更改为 0dp 但我想在主题中执行此操作 对于 Android 4 4 我使用
  • 使用线程或异步任务的位图工厂动画

    这个问题是我在这个论坛上提出的多个问题的后续问题 这些问题涉及为什么我一直在尝试的动画不起作用 简单回答一下之前的问题 我的动画作为 2 个班级的单独项目工作 但无法工作 当包含在我的包含多个类的项目中时 使用 finish 类关闭了导致我
  • 如何将 TextView 的文本设置为字符串资源? (适用于安卓的Java)

    我想更改a的文本TextView我已经在其中创建的另一个文本的组件strings xml 当应用程序启动时 显示的文本存储在strings xml 名称为 help0 我想以编程方式将其设置为名称 help00 下的字符串 方法是在名称的
  • 如何在 Android 上检测从 3g 到 H+ 的网络类型更改

    通过连接管理器和广播接收器 我能够获取连接和断开连接事件 如下所述埃里克的帖子在这里 https stackoverflow com questions 1783117 network listener android 我想知道的是网络连接
  • 如何向我的 Android 应用程序授予系统权限?

    我正在实现一个从设备上静默卸载应用程序的演示 在 adb shell 中 我可以使用 pm uninstall packagename 来执行任务 但是当我编写代码时 我收到了一些权限被拒绝的错误 我已经用谷歌搜索了一段时间 发现要获得 D
  • 可以制作一个不调用Intent的Android通知吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取 gradle 构建的 aapt2 参数?

    我有兴趣尝试使用 aapt2 从命令行编译 Android 应用程序 当我尝试执行以下操作时 链接约束布局库时遇到问题aapt2 link命令 该程序从 Android studio gradle 成功构建 如何使 gradle 命令行调用
  • Android 支持 v4 22.2.0 的 Proguard 配置

    更新 Gradle Android 构建的依赖关系后使用com android support support v4 22 2 0从本地 Maven extras 存储库 在 SDK 内 Proguard 开始抛出这些问题 Warning
  • ActionBar 上的自定义主页按钮

    我正在使用 ActionBar Sherlock 库 所以 要更改默认的主页按钮 我这样做了 这不起作用 所以 我也添加了这个
  • 生产中的 FirebaseRemoteConfigClientException (Android)

    到目前为止我做了什么 我在用Tasks await blocking https developers google com android guides tasks blocking工作线程中的 firebase 调用机制以避免回调 我正
  • 将目录从 Assets 复制到本地目录

    我正在尝试使用资产文件夹中的目录并将其作为File 是否可以访问 Assets 目录中的某些内容File 如果没有 如何将 Assets 文件夹中的目录复制到应用程序的本地目录 我会像这样复制一个文件 try InputStream str
  • 具有多个 Item 布局的 ListView 适配器

    我正在考虑向我的 Android 应用程序添加一个带有缩略图的列表视图 左边是缩略图 右边是文字 有没有办法用单独的 xml 文件填充列表视图 例如 我可以为奥地利 英国 美国等提供单独的 xml 并将它们添加到列表视图中吗 我问的原因是
  • 为什么无法在 android 中包含 iostream?

    已安装 android ndk r7 并尝试编译 cpp 文件 include
  • Google Play 服务和“没有与此客户端 ID 关联的链接应用程序”

    我正在尝试按照 Google 的文档实施 Google Play 服务 当我尝试连接我的设备时 我看到以下内容GameClient E Volley 4953 il a Unexpected response code 401 for ht
  • 自定义 lint 规则,确保不调用特定方法

    我想确保在我的 Android 应用程序 Java 和 Kotlin 代码中 中不会调用特定类的特定方法 假设 我有一个名为Bar有两种方法 allowed and disallowed 这是代码 package com public cl
  • Android AudioRecord 与 MediaRecorder 录制音频

    我想在我的 Android 手机上录制人声 我注意到 Android 有两个类可以做到这一点 录音带 http developer android com reference android media AudioRecord html a
  • 以编程方式启用和禁用自动旋转?

    有很多很酷的小部件可以在手机上启用和禁用自动旋转 禁用它会在手机上的所有应用程序中关闭它 他们如何实现这一目标有什么想法吗 这应该可以为你解决问题 import android provider Settings public static
  • Android 每个 Activity 中的通用进度条

    我已经修改了解决方案 我可以获得进度条 但进度条永远不会隐藏 这是创建具有相对布局的进度条的类 public class ProgressBarHandler private ProgressBar mProgressBar private
  • 当意图过滤器启动时调试应用程序

    我通常通过按 Eclipse 中的小 bug 图标来调试我的应用程序 但现在我在清单中插入了这样的意图过滤器
  • Android:自动重新连接 BLE 设备

    我的目标是让 Android 设备重新连接到之前连接过的 BLE 设备无需用户干预与经典 BT 配对设备的操作方式相同 甚至可以通过电源循环工作 BTLE 设备的想法之一是节省服务 绑定和启用状态 以便重新连接非常快并且在外设上消耗很少的功

随机推荐

  • 常用数据库的特点、应用场景信息整理

    关系型数据库 关系数据库 xff0c 是建立在关系模型基础上的数据库 xff0c 借助于集合代数等数学概念和方法来处理数据库中的数据 现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示 关系模型是由埃德加 科德于1970年首先提出
  • ASM磁盘组及磁盘 添加、删除

    一 相关概念 1 ASM 磁盘组 ASM存储管理除了ASM实例之外 xff0c 最大的组成部分就是ASM磁盘组 一个ASM磁盘组由过多个ASM磁盘组成 一个磁盘组内可以存放多个数据文件 xff0c 一个数据文件仅仅只能位于一个磁盘组内 xf
  • 分区表的导入导出 expdp&impdp Oracle 11.2.0.4

    分区表的导入导出 数据库版本 xff1a Oracle 11 2 0 4 expdp 导出 schema 当前有两个分区表 TABLE NAME PARTITION NAME TABLESPACE NAME TABLE1 SYS P57 N
  • expdp和impdp需要注意的地方

    1 expdp impdp需要注意的地方 1 1 参考 http blog itpub net 28869493 viewspace 1094164 DataPump 反映了整个导出 导入过程的完全革新 不使用常见的 SQL 命令 xff0
  • Sublime text 3 中文文件名显示方框怎么解决

    在sublime text 3中 xff0c Preference Settings User xff0c 最后加上一行 34 dpi scale 34 1 0 覆盖操作系统设置的DPI 34 font size 34 11 0 34 ig
  • Oracle expdp/impdp常用性能优化方法

    Oracle expdp impdp常用性能优化方法 转自 xff1a http blog chinaunix net uid 20785090 id 4088083 html expdp impdp在进行数据迁移时速度极快 通过一定的优化
  • 移动端webUI框架(HTML5手机框架)

    淘宝SUI Mobile框架 官网地址 xff1a http m sui taobao org SUI Mobile 是一套基于 Framework7 开发的UI库 它非常轻量 精美 xff0c 只需要引入我们的CDN文件就可以使用 xff
  • 在线创建dg环境 adg

    在线创建dg环境 adg 在两个库的环境变量中添加如下 export TNS ADMIN 61 ORACE HOME network admin 主库 xff1a lsnrctl stop Shutdown immediate Startu
  • Ubuntu18.04 编译 Android10.0 系统环境

    Ubuntu18 04 编译 Android10 0 系统环境 xff0c 每次搞一个新电脑或环境 xff0c 编译总要搞半天 xff0c 虽然知道是环境安装的问题 xff0c 但确实很烦和耗时 xff0c 关键是报错各异 思路 xff1a
  • 如何在Init里添加一个自启动程序,Server

    一 添加一个系统服务的权限声明 情景 xff1a 定义一个init启动的service xff0c demo service xff0c 对应的执行文件是 system bin demo 1 创建一个demo te在 device medi
  • [解决]Eclipse不能开发Web项目

    因为好久没有用Eclipse开发Web项目 xff0c 突然 xff0c 今天开发Web项目的时候 xff0c 怎么也建立不了Web项目 所以揣想是Eclipse版本不对或者是没有装插件 因为自己的Eclipse已经安装了很多其他的插件 x
  • 解决Tomcat访问Web显示HTTP Status 404 - /hrm/

    步骤 xff1a 1 打开Eclipse xff0c 双击Tomcat 2 更改Deploy path xff0c 它后面的值默认是 34 wtpwebapps 34 把它改成 34 webapps 34 也就是tomcat中发布项目所在的
  • Cordova系列学习教程01. 了解Cordova

    转载请标明出处 xff1a http blog csdn net junzaivip article details 51151924 xff0c 本文出自 junzaivip博客 概念 xff0c phonegap与cordova之间的区
  • 2016年小结 2017年展望

    转载请标明出处 xff1a http blog csdn net junzaivip article details 54231935 xff0c 本文出自 junzaivip博客 每个人的世界里有的不止是光鲜 xff0c 其实还有更多别人
  • 如何将本地已有的项目加入git版本管理

    本文地址 xff1a https blog csdn net junzaivip article details 82626584 如果自己已经新建的一个项目 xff0c 暂时没有加入项目管理 xff0c 且名称不变 xff0c 如何加入
  • 基于github搭建自己的个人博客

    今天一时兴起 xff0c 看见别人使用的github io搭建了属于自己的个人博客 xff0c 我也使用github搭建一个自己的博客系统 xff1b 步骤一 xff1a 创建一个自己的github账号 xff1b xff08 略 xff0
  • ES6基本用法

    ES6基本用法 字符串的基本用法 let junzai 61 34 史慧君 34 let blog 61 34 淘宝多的是 xff0c 都是正版 xff0c 放心买 学习字符串 34 let blog 61 96 淘宝多的是 xff0c 都
  • Active MQ C++实现通讯记录

    Active MQ C 43 43 实现通讯 背景知识 xff1a ActiveMQ是一个易于使用的消息中间件 消息中间件 我们简单的介绍一下消息中间件 xff0c 对它有一个基本认识就好 xff0c 消息中间件 xff08 MOM xff
  • Node升级到最新版本

    检查目前的版本 xff1a localhost shihuijun node v v8 9 3 清除node js的cache 不确定有没有必要 localhost shihuijun sudo npm cache clean f Pass
  • Android Activity 重载 onConfigurationCangerd之屏幕方向改变

    一 onConfigurationChanged 触发时机 onConfigurationChanged 事件不只是屏幕方向改变才触发 xff0c 其他一些系统设置改变也可以触发 xff0c 例如 xff1a 打开软件盘 屏幕旋转 捕获事件