我正在研究Android Live Wallpaper应用程序,需要正确处理屏幕方向更改。
目前,我将onConfigurationChanged
用于此目的(在此方法中,我需要更改LWP屏幕元素的坐标。我使用andengine
)。一切在模拟器和我的测试电话上都可以正常工作,但是一些我的客户与 samsung Galaxy Note2(t03g), lg Thrill(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>
在我的实时壁纸中,处理方向更改,我使用 onConfigurationChange()
方法检查方向更改,但是我对这2部电话没有任何直接的经验从来没有对他们抱怨。我的方法看起来像以下方式:
@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"
。
android:configChanges="orientation|screenSize"
注意:从Android 3.2(API级13)开始,"屏幕尺寸"当设备在肖像和景观之间切换时,也会发生变化方向。因此,如果要防止由于为API 13或更高的API开发时的方向变化(AS由Minsdkversion和TargetsDkversion属性声明),您必须包括"屏蔽"除了"方向"之外的价值价值。也就是说,你必须脱瓦Android:configchanges =&quot'entrientation | ScreenSize&quort。但是,如果您的应用程序目标是API级别12或更低,然后您的活动始终处理此配置自身(此配置更改)即使在Android 3.2或更高的设备)。
摘自http://web.archive.org/web/20120130201824/https://developer.android.com/guide/guide/topics/resources/runtime-changes.html-changes.html