Android 应用程序方向更改会重新启动 Activity

2024-05-02

我有一个活动,只要方向改变,它就会重新启动。我编写了代码来防止清单文件中的方向发生变化时活动重新启动,如下所示:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.sample.appname.MainActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|keyboardHidden"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

在上面的代码片段中android:configChanges="方向|键盘隐藏"应该为我做这项工作,但活动仍在重新启动。请让我知道如何纠正它。


实际上你不应该阻止 Activity 重新启动。由于多种原因,有必要在轮换更改后重新创建活动。其中之一是布局必须膨胀以处理更改的屏幕尺寸和类似的事情(很容易想象纵向模式下的布局与横向模式下的布局完全不同)。 但是,有一种方法可以告诉系统您自己处理屏幕变化。因此更改清单中的行

android:configChanges="orientation|keyboardHidden"

to

android:configChanges="orientation|screenSize"

那么该活动将不会被重新创建。您将通过以下方式收到回调onConfigurationChanged() http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration)方法,以便您可以在方向改变时执行某些操作。如果您不想在配置更改时执行任何操作,则不要覆盖onConfigurationMethod()在您的活动中。读Android 开发者 API 指南中的此部分 http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange了解更多信息。

我从那里得到这个这个答案 https://stackoverflow.com/a/5913370/5247502。答案中还有两种方法,但我认为上面描述的方法最适合您的情况。

EDIT:也许你必须添加keyboard|keyboardHidden to the android:configChanges属性也是如此,如中所述这个答案 https://stackoverflow.com/a/13149621/5247502


EDIT #2:如果您想检索设备的当前方向,您可以调用

Activity.getResources().getConfiguration().orientation

这将返回常量ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE.

如果您对精确的旋转角度感兴趣,请使用

int rotation =  getWindowManager().getDefaultDisplay().getRotation();

并使用所描述的开关盒之类的东西来实现差异化here https://stackoverflow.com/a/23930318/5247502.

确定设备旋转的第三种方法是getRequestedOrientation()这将返回一个定义在中的常量文档 http://developer.android.com/reference/android/content/pm/ActivityInfo.html#screenOrientation

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

Android 应用程序方向更改会重新启动 Activity 的相关文章

随机推荐

  • 自动订阅应用内购买:恢复后续续订

    根据 Apple 应用内购买编程指南 App Store 每次续订订阅时都会创建一个单独的交易 当您的应用程序恢复以前的购买时 Store Kit 会将每笔交易传送到您的应用程序 假设我的应用程序订阅仅限客户端 无服务器组件 验证后续续订是
  • { [FacebookTokenError:此授权码已被使用。]

    我有一个航行应用程序 我正在尝试实现 Facebook 登录 当我单击 使用 facebook 登录 按钮时 出现此错误 error A server error occurred in a request error FacebookTo
  • PHP cURL:CURLOPT_CONNECTTIMEOUT 与 CURLOPT_TIMEOUT

    PHP 有以下两个与超时相关的选项 CURLOPT CONNECTTIMEOUT and CURLOPT TIMEOUT PHP 网站上的描述有点模糊 有什么不同 使用现实世界的示例 假设您通过 cURL 将 GET 变量发送到 URL 并
  • 有没有办法理解安装错误代码的实际含义?

    我正在尝试应用内更新功能 但收到 FAILED 安装状态和 100 安装错误代码 有什么办法让我知道可能是什么原因造成的吗 我实现了灵活的应用内更新 并记录了每个步骤 遵循 Android 开发者教程here https developer
  • jQuery 自动完成标记插件,如 StackOverflow 的输入标记? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 哪些解决方案可以实现与 SO 用于输入标签相同的自动完成功能 有可以处理一个单词的插件 但我还没有看到
  • 需要从表单生成的工作表中移动行

    我有一个调查表 我需要我的团队查看一次 但之后我希望我的团队将其设置为 已关闭 的行保存到存档表中 过去 我在其他工作表中使用过此脚本 但它似乎不适用于表单链接工作表 经过研究 我发现您无法从表单链接表中剪切 但可以删除行 我的理论是脚本正
  • 当implicitly_wait不起作用时使用find_element_by_link_text出现NoSuchElement异常?

    python 和 Selenium 以及相关编程的新手 我正在尝试自动化硒以点击特定链接 在本例中 我希望它点击与链接文本 B 关联的链接 li a href B a 在这个网站上 http www lw com http www lw c
  • Azure 中的 ASP.NET MVC 4 和 Web API - 未找到 HTTP 资源

    使用 Visual Studio 2012 我创建了一个简单的 Windows Azure 项目 云项目 其中包含 ASP NET MVC 4 网站 我没有对模板进行任何更改 我只是尝试使用Azure 网站 https www window
  • 在 Laravel 5.1 中将模型保存到数据库之前执行一些操作

    在 Laravel 5 1 模型中 在将数据写入数据库之前 我该如何做一些事情 例如修改某些数据字段或进行更多验证 关于该问题的文档很难在实际应用中使用 http laravel com docs 5 1 eloquent events h
  • SwiftUI 双向绑定到枚举案例中 ObservableObject 内的值

    我正在尝试观察 a 的变化bool包含在一个值ObservableObject这是一个值enum案件 这是我想要实现的目标的示例 但使用当前的方法我收到错误Use of unresolved identifier type1Value im
  • ASP.NET MVC - 角色提供程序的替代方案?

    我试图避免使用角色提供程序和成员资格提供程序 因为在我看来它太笨拙了 因此我试图制作自己的 版本 它不那么笨拙并且更易于管理 灵活 现在我的问题是 除了角色提供者之外 还有其他不错的选择吗 我知道我可以自定义角色提供者 会员提供者等 通过更
  • 在 HTML 画布上绘制线宽连续变化的线条

    我试图画一条线 从一条细线开始 然后逐渐加宽直到结束 我需要绘制半平滑曲线 由几条直线合成 并且在寻找解决此任务的方法时遇到问题 这个小提琴显示了我的问题 http jsfiddle net ZvuQG 1 http jsfiddle ne
  • Firestore:如何重新订购我已经参考过的集合?

    有没有办法保留同一集合的引用 但使用 firestore 更改顺序 TLDR 这就像我想要实现的功能 https stackoverflow com a 17320018 https stackoverflow com a 17320018
  • Gradle,在撰写多平台项目中使用material3

    我正在使用 Jetpack Compose Multiplatform Desktop 做一个项目 我对 Gradle 不太熟悉 我想在我的项目中使用 Material 3 所以 我添加了这一行build gradle kts file i
  • cakePHP 命名约定如何工作?

    我对 PHP 比较陌生 开始学习 PHP 但后来遇到了 cakePHP 它应该可以加快开发时间 阅读文档和博客教程后 我仍然不明白命名约定 我想直到我开始做一些例子我才会知道 但是为了让我开始 有人可以向我解释 cakePHP 如何将数据库
  • 部署组和部署池有什么区别?

    在 Azure DevOps 中创建部署组时 它会自动为您创建部署池 但是 从 组织设置 gt 部署池 面板 您可以创建新的部署池 而无需创建部署组 部署组和部署池之间有什么关系 例如 一个部署组可以链接到多个部署池吗 这是一个很好的博客
  • Foreach 循环编辑器中缺少枚举器

    我在一台新笔记本电脑上 在 Visual Studio 2015 中的 SQL Server Integration Services 包上工作 在以前版本的 Visual Studio 中 枚举器配置部分中有几个选项 如下所示 在 VS
  • 邀请朋友加入 Facebook 应用程序 - Android,未发送邀请

    我已经用我的 Android 编码创建了一个 Facebook 活动 现在我想邀请朋友参加 下面是我邀请好友的代码 private void inviteFriends try Bundle params new Bundle params
  • switch 在 Visual C++ 中如何编译?它的优化程度和速度如何?

    我发现我只能在 C 中使用数值switch陈述 我认为它和一堆更深层的区别if else s 因此我问自己 如何switch与 不同if elseif elseif在运行速度 编译时优化和一般编译方面 我这里主要说的是MSVC 开关通常被编
  • Android 应用程序方向更改会重新启动 Activity

    我有一个活动 只要方向改变 它就会重新启动 我编写了代码来防止清单文件中的方向发生变化时活动重新启动 如下所示