安卓屏幕方向处理问题

5

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

目前,我使用 onConfigurationChanged 来实现这个功能(在这个方法中,我需要改变我的 LWP 屏幕元素的坐标。我使用 andengine)。在模拟器和我的测试手机上一切正常,但是一些使用 三星Galaxy Note2(t03g)LG thrill(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>

http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange - Padma Kumar
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"

2
 android:configChanges="orientation|screenSize"

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接