5

我正在开发 android 动态壁纸应用程序,需要正确处理屏幕方向更改。

目前我onConfigurationChanged用于此目的(在这种方法中,我需要更改 LWP 屏幕元素的坐标。我使用andengine)。在模拟器和我的测试手机上一切正常,但我的一些使用三星 Galaxy Note2 (t03g)LG 惊险 (LGE LG-P925) 的客户报告了在屏幕方向更改期间应用程序工作不正确的问题。

我手头没有这些电话,但可以假设问题与onConfigurationChanged未被呼叫有关。

使用方法是否正确onConfigurationChanged?也许我需要使用onSurfaceChanges或类似的东西?您能否建议我解决此问题的正确方法?

阿洛斯,我已添加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>
4

2 回答 2

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"

于 2012-12-24T20:17:52.153 回答
2
 android:configChanges="orientation|screenSize"

注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)进行开发时防止由于方向更改而导致运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,您必须声明 android:configChanges="orientation|screenSize"。但是,如果您的应用程序以 API 级别 12 或更低级别为目标,那么您的 Activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 Activity,即使在 Android 3.2 或更高版本的设备上运行时也是如此)。

于 2012-12-24T20:14:26.580 回答