5

我想避免屏幕方向更改时 Activity 重新启动。在较旧的 sdk 版本中,它是由configChanges="orientation"(在清单中)完成的。在较新的版本screenSize中添加了。

我的 minSdk 是 8,targetSdk 是 17,我发现自己处于一个奇怪的情况:我不能将 screenSize 放入 configChanges(因为 minSdk),但是我的手机(4.1)会破坏方向改变的任何活动(因为 targetSdk) .

有什么出路吗?我能否以某种方式防止这种破坏,而不必针对过时的 Sdk(但仍将其作为 minSdk 中的一个选项)?

4

2 回答 2

0

您可以保留您的android:minSdkVersion和,android:targetSdkVersion因为您目前拥有它们(在您的示例中为 8 和 17)。

为了能够放入screenSizeconfigChanges更改此行

target=android-someapinumber

project.properties文件中。选择首次出现someapinumber的 android 版本(例如,API 13)。screenSize

尽管您询问了特定的“screenSize”问题,但此解决方案适用于您希望支持旧设备但同时必须使用更新功能的所有类似情况。在这种特殊情况下,不知道此属性的旧设备将忽略“screenSize”,因此您不必担心向后兼容性。在其他情况下,您可能必须在源代码中添加如下所示的条件,以确保在运行时您的应用不会使用给定(旧)android 版本中不可用的功能。

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) 
{
    // Code that uses features available in LOLLIPOP and newer
    // versions of android, while the app also runs on older versions
    // and supports them because of android:minSdkVersion.
}
于 2019-05-31T19:32:51.800 回答
-1

啊,我终于想出了解决方案:

至于我们不能用 screenSize 属性影响“已知建议的解决方案”,因为当我们指定 android:configChanges="screenSize" 时,eclipse 会在 screenSize 上触发 xml 解析错误,如果我们在 targetSdkVersion 12 或更低版本中指定,android os 将不会在方向更改时重新启动活动. (我现在也知道并且正在使用 targetSdkVersion 来识别最大支持的 sdk 版本。但是当我为此再次研究时,有 maxSdkVersion。)

所以通过这个设置:

使用-sdk android:minSdkVersion="10" android:targetSdkVersion="12"
安卓:m​​axSdkVersion="17"

...

android:configChanges="方向|..."

os 不会在方向更改时重新启动活动,应用程序仍将支持最小和最大 sdk 版本,但将在与 sdk 12 的兼容模式下运行,这是 sdk 的最高版本,不会重新启动活动,这将解决上述问题。

于 2013-01-20T03:34:47.507 回答