我正在开发Android动态壁纸应用程序,需要正确处理屏幕方向的变化。
目前我使用onConfigurationChanged
来实现此目的(在此方法中,我需要更改LWP屏幕元素的坐标。我使用andengine
)。在模拟器和我的测试手机上一切正常,但我的一些客户使用三星Galaxy Note2(t03g), LG惊险(LGE LG-P925)报告问题不正确屏幕方向变化时的应用工作。
我手头没有这些手机,但可以认为问题与onConfigurationChanged
未被调用有关。
使用onConfigurationChanged
方法是否正确?也许我需要使用onSurfaceChanges
或类似的东西?你能否告诉我解决这个问题的正确方法?
Alos,我已将android:configChanges="keyboardHidden|orientation"
添加到AndroidManifest.xml
:
<activity
android:name=".WallpaperSettings"
android:configChanges="keyboardHidden|orientation"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.PREFERENCE" />
</intent-filter>
</activity>
答案 0 :(得分:3)
在我处理方向更改的动态壁纸中,我使用onConfigurationChange()
方法检查方向更改,但我对这两部手机没有任何直接经验,但我从未收到任何投诉关于他们。我的方法看起来像是:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
rotated = true;
}
else {
rotated = false;
}
}
在draw()
方法中,我检查rotated
布尔值。 onSurfaceChanged()
中还有其他检查,以便在方向更改时更正分辨率更改。
我的清单文件中根本没有android:configChanges="keyboardHidden|orientation"
。
答案 1 :(得分:2)
android:configChanges="orientation|screenSize"
警告:从Android 3.2(API级别13)开始,“屏幕大小” 当设备在纵向和横向之间切换时也会发生变化 取向。因此,如果您希望阻止运行时重新启动 开发API级别13或更高级别时的方向更改(如 由minSdkVersion和targetSdkVersion属性声明),你 除“方向”外,还必须包含“screenSize”值 值。也就是说,你必须decalare 机器人:configChanges = “方向|屏幕尺寸”。但是,如果你的 应用程序目标API级别12或更低,然后您的活动始终 处理此配置更改本身(此配置更改 即使在Android 3.2或Android上运行,也不会重新启动您的活动 更高的设备)。