我的应用程序是位图密集型的,具有精确的像素布局(实际上,这是一种游戏,很难避免这种基于像素的坐标)。
我想做的是在我的onCrete
- 我使用众所周知的 API -中执行一些布局计算和位图预缩放getWindowManager().getDefaultDisplay().getSize()
- 以检索屏幕尺寸并进行计算。
但是,我刚刚遇到了一个意想不到的问题。我的活动仅配置为横向,但如果我在模拟器上启动我的应用程序并onCreate()
在模拟器锁定时调用,则返回的屏幕尺寸getSize()
指示纵向。一旦我解锁屏幕,onCreate()
就会再次调用,这一次正确地符合预期的横向模式尺寸。
我不确定如何处理这种情况。我看到以下选项:
- 对于每个
onCreate()
调用,再次执行完整的布局计算和资源缩放。这是逻辑上正确的解决方案,但我不想重复相同的工作,只是为了丢掉第一个结果。 - 如果
onCreate()
调用纵向模式,则什么都不做,并设置黑色背景(我可以看到解锁屏幕时有一个愚蠢的旋转动画,所以这将成为一个淡入动画)
其实我更喜欢第二种选择,但我有点害怕任何副作用。有人遇到过这个问题吗?
更新 (2012-07-08):我可能给这个问题分配了一个有点误导性的标题(对不起!),因为问题不在于检索尺寸本身,也不在于计算布局。它更多的是关于首先以纵向模式创建的活动,然后再次以横向模式重新创建,尽管被声明为仅横向模式。我最初期望(合理地,嗯?)该活动仅以横向创建。
我最终决定在以纵向模式创建活动时用黑色填充活动,没有观察到任何副作用。在 Android 4.0 上,当我解锁屏幕时,我可以看到实际的旋转动画 - 有点奇怪,但我想它应该通知用户她应该旋转手机。鉴于在纵向模式下我只是用黑色填充屏幕,这个动画看起来有点像淡入和旋转的组合 - 完全可以接受。