问题标签 [screen-rotation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2262 浏览

android - Android:在画布上绘图和旋转

我正在为平板电脑创建一个绘图应用程序,并且对如何最好地处理与屏幕方向更改相关的绘图画布感兴趣。绘图程序跟踪用户输入并将它们存储为向量,由 X、Y 坐标锚定。

该问题与纵向/横向模式下 X、Y 的不同大小有关。如果用户有一个填满屏幕的画布(减去通知栏和标题栏),并且在纵向模式下在画布底部附近绘制(比如在 320x480 屏幕上的点 140,460 处),当屏幕翻转为横向并从我存储的 X,Y 向量,140,460 处的点现在超出了屏幕的范围(因为屏幕现在是 480x320)。同样,如果他们在靠近屏幕右侧边缘的横向画点并翻转回纵向,这些点将超出边界。

我已经查看了解决方案,显而易见的一个似乎是将屏幕简单地锁定到特定方向。我从 Marketplace 下载的许多绘图应用程序都是这样处理的。

当我为平板电脑设计这个时,我想让用户可以灵活地随意绘制,但在屏幕边界等方面保持一些理智。

我曾经/尝试过的想法包括:

  • 锁定到特定方向 - 好的,但讨厌强迫用户选择特定的偏好
  • 锁定到特定方向并隐藏标题和通知栏,因此用户只看到一个大的空白画布,他们可以随意使用 - 但讨厌通知栏被隐藏

我考虑过隐藏标题栏、显示通知、允许更改方向,然后如果屏幕旋转为横向,将画布旋转回纵向,但是当导航栏从纵向顶部移动到在横向的右侧,我仍然遇到相同的 X、Y 边界问题,只是程度要小得多(有效通知栏的宽度)。

对此有任何解决方案的想法吗?

谢谢。

0 投票
5 回答
53128 浏览

android - 如何检测屏幕旋转

我有一个显示指南针的活动,我需要知道屏幕的方向才能正确旋转指针。我需要区分 90° 和 270° 旋转以正确处理这个问题。

当我旋转屏幕(至少在我的 Nexus S 上)时,onCreate会调用活动,例如当我从纵向模式旋转到横向模式时。当我从一种横向模式旋转到另一种并抬起顶部边缘时,onCreate()会被调用两次(一次用于纵向,一次用于目标横向模式)。

但是,当我旋转底部边缘向上时,屏幕旋转 180° 并且onCreate没有被调用。在这种情况下是否有事件被触发?

0 投票
2 回答
2831 浏览

android - Android 屏幕方向更改导致应用退出

我有一个应用程序,我通过设置设置为仅以纵向模式显示

对于清单中的每个活动。这工作正常,当我旋转手机时,我的应用程序屏幕不会旋转。

问题是,如果我用手机以纵向方向启动应用程序,那么当我的第一个 Activity 运行(动画启动屏幕)并且我在第一个 Activity 仍在运行时将手机旋转到横向,当下一个 Activity 启动时(它从第一个活动线程的 finally 块启动)应用程序将退出。它不会强制退出,它只是退出到主屏幕。LogCat 中没有抛出异常或任何其他说明发生这种情况的原因。屏幕从不旋转(因为它不应该)。如果我在横向模式下使用手机启动应用程序,它可以正常工作。这只发生在我从纵向开始并在之后旋转到横向时。

我试过把

在每一项活动中,我也尝试过

我在活动中执行和不执行 onConfigurationChanged 都尝试了上述方法。当我实现它时,我只是忽略了它(只是调用 super.onConfigurationChanged)。

除了在清单中设置它之外,我还尝试以编程方式将活动设置为纵向。

我还可以通过在打开物理键盘的情况下启动应用程序并在车载底座中启动应用程序来在原始摩托罗拉 Droid 上实现这一点。应用程序启动,启动画面以纵向启动(即使键盘打开或手机在车载底座中),但一旦启动第二个活动,应用程序就会退出。

我认为这与 Activity 在方向更改时被破坏没有任何关系。我所有的全局数据都存储在我的应用程序的自定义 Application 类中,正如我之前提到的,在全局被清除的情况下,我没有遇到任何异常,例如空指针。

我正在使用 Android 2.3.2 在 Verizon 上运行摩托罗拉 Droid 原版。

0 投票
6 回答
43876 浏览

android - 旋转时保留 Fragment 对象

我在 Honeycomb 中开发了一个应用程序,我正在使用片段。
这是我的应用

  • 我有一个活动(说 A1),其中有一个片段
  • 最初这个片段持有对象一个片段对象说(F1)
  • 然后根据用户操作,它可能会更改为其他对象 F2、F3 ....

我的问题是什么

当用户旋转设备时,将重新创建活动,并使 F1 作为片段对象,即使在旋转之前它不是 我使用的,但它对我不起作用 我已经通过代码在我的函数中添加了片段,就像这样
What is the way to retain the fragment object while rotating?
setRetainInstance(true);
onCreate

0 投票
2 回答
940 浏览

android - Android:屏幕方向报告太慢?

Display.getRotation()根据 Google 的这篇有用的博客文章,我正在使用该方法来确定我的应用程序中屏幕的当前方向:

http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html

简而言之,我有一个绘图应用程序,允许用户在屏幕上绘制形状等,并且绘图画布需要保持相同的方向,但我仍然希望选项菜单等翻转到正确的位置用户是否以及何时开始以不同的方向使用设备进行绘图。

对于onDraw()画布,我请求方向getRotation(),然后将画布旋转回“0”位置,以便从最终用户的角度来看,画布永远不会移动。工作起来就像一个魅力,除非用户非常快速地翻转设备......然后getRotation()报告旋转 0,因此画布不会旋转回来,使绘图看起来翻转或转动。

有趣的是,标题栏和选项菜单确实会翻转……所以不确定它们是从哪里获得方向的。如果用户随后开始绘图,则后续调用会onDraw()获取正确的旋转值,并且绘图会回到正确的位置,但正如您可以想象的那样,这有点令人不安/烦人。有什么应对策略吗?

谢谢。

0 投票
1 回答
351 浏览

iphone - cocos2d中的iPhone反向设备方向

这是一个奇怪的问题,有没有办法在 cocos2d 中反转 iPhone 的设备方向?例如:如果设备处于横向左侧位置,我希望屏幕右侧显示横向,反之亦然。所以基本上是让设备以与其预期用途相反的方式工作。谢谢你。

0 投票
1 回答
1300 浏览

ios - iPad OpenGL 屏幕旋转问题(多任务栏和弹出窗口不旋转)

我正在使用 OpenGL 为 iPad 构建应用程序,但遇到屏幕旋转问题。应用程序本身工作正常并且在所有四个方向上都正确显示,但其他元素仅部分响应设备旋转。

OpenGL 使用变换矩阵处理应用程序的旋转。这一切都很好。默认图像也会以正确的旋转方式显示。

但是,多任务栏没有按应有的方式旋转。它出现在应用程序打开的一侧。因此,如果我打开应用程序,然后双击主页按钮,它位于正确的一侧,但在旋转设备后,它保持在同一侧,直到应用程序关闭并重新打开。当显示此条时,OpenGL 应用程序会旋转以匹配条的位置。

对话框,例如“登录游戏中心”弹出窗口也没有正确旋转。它们似乎以标准的纵向显示。

我不确定是否有任何其他必要的具体细节来识别问题,但非常感谢任何建议。

0 投票
3 回答
5101 浏览

android - 屏幕旋转后如何恢复textview滚动位置?

在我的 Android 布局中,我有一个 TextView。这个 TextView 正在显示一个相当大的可跨文本并且它能够滚动。现在,当手机旋转时,视图被销毁并创建,我必须再次 setText() TextView,将滚动位置重置为开头。

我知道我可以使用 getScrolly() 和 scrollTo() 滚动到像素位置,但是由于视图宽度的变化,线条变得更长,并且位于像素位置 400 的线条现在可能位于 250。所以这不是很有帮助。

我需要一种方法来在 onDestroy() 的 TextView 中找到第一条可见行,然后在旋转后让 TextView 滚动到这段特定的文本。

有任何想法吗?

0 投票
1 回答
1827 浏览

android - 我可以在 AsyncTask 中保留 ContentResolver 多长时间?

我正在尝试编写一个为长时间运行的操作生成 AsyncTask 的 Activity,并定期将状态更新发布回 Activity。我想确保 AsyncTask 能够正确地在屏幕旋转或其他破坏条件(如 OOM)中幸存下来。

我已经阅读了 android-developers list 上的这个线程,这反过来又引导我实现了这个实现,这几乎是我所需要的。但是,我的 AsyncTask 的最后一步是从内容解析器中删除一些数据。不能跳过这一步非常重要,因为数据是敏感的,在正常情况下不应该留在手机上。但是,ContentResolvers 来自 Contexts,在本例中是 Activity,并且使用此方案,当 AsyncTask 准备好执行删除操作时,Activity 可能为空。

在 AsyncTask 构造中从 Activity 获取 ContentResolver 并在 Activity 的生命周期之后保持它是否安全?如果不是,我该怎么办才能处理这种情况?

0 投票
3 回答
5678 浏览

android - 屏幕旋转时的选项卡更改 [Android]

嗨,我有带有 4 个选项卡的 Android 应用程序(比如说 tab1、tab2、tab3、tab4)。当活动开始时,默认选项卡是 tab1。比我切换到任何其他选项卡(tab2、3 或 4)并更改屏幕方向,它总是重置为默认选项卡(tab1)。

我尝试使用以下代码:

在 createView() 里面我有:

CurentTab是私有 int 并且默认设置为 0,但它是在 TabChange 上设置的:

我在这里堆积...有没有其他方法可以解决这个问题?

很快: 我希望选项卡在屏幕旋转时不会更改为默认值...