目标SDK版本与最小SDK版本:configChanges

5
我希望在屏幕方向改变时避免Activity重启。在旧版SDK中,可以通过在清单文件中添加configChanges="orientation"来实现。在新版本中,添加了screenSize
我的minSdk是8,targetSdk是17,我发现自己处于一种奇怪的情况:我不能将screenSize放入configChanges中(因为minSdk的原因),但我的手机(4.1)会在方向改变时销毁任何活动(因为targetSdk的原因)。
有没有出路?我能否在不针对过时的SDK的情况下防止此销毁(但仍将其作为minSdk的选项)?

“我无法将screenSize放入configChanges中,你实际上尝试过吗?” - Henry
你的项目构建目标是什么?构建目标 != 目标SDK。 - Jesse J
@Henry - 当然我试过了,否则我也不会问了。 - Malis
@MH(和Henry)-构建目标当前为API 10(因此我也可以在2.x版本中看到它,因为我没有真正的旧系统手机)。问题是,我无法将targetSDK设置为17并同时使用screenSize以及minSDK 8(或任何低于13的版本)。我希望它也能在旧版本中运行。我认为我能够编写代码,然后仅在最终版本完成时选择构建目标... - Malis
据我所知,你的假设是不正确的。你可以在清单中添加“screenSize”属性,并且仍然可以在13级以下的设备上无问题地运行应用程序。只需确保您构建针对API级别13或更高级别。在旧设备上,该标志被简单地忽略。 - MH.
显示剩余3条评论
2个回答

0

您可以将android:minSdkVersionandroid:targetSdkVersion保留为当前版本(在您的示例中为8和17)。

为了能够将screenSize放入configChanges中,请更改project.properties文件中的以下行:

target=android-someapinumber

选择someapinumber作为首次出现screenSize的Android版本(例如API 13)。

尽管您要求解决特定的“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.
}

-1

啊,我终于找到了解决方案:

由于我们无法使用screenSize属性影响“已知建议的解决方案”,因为当我们指定android:configChanges="screenSize"时,eclipse会触发xml解析错误,如果我们在targetSdkVersion 12或更低版本中指定,android操作系统将不会在方向更改时重新启动活动。(我之前并不知道并且一直在使用targetSdkVersion来确定最大支持的sdk版本。但是当我再次进行研究时,发现有maxSdkVersion。)

所以通过以下设置:

uses-sdk android:minSdkVersion="10" android:targetSdkVersion="12" 
android:maxSdkVersion="17"
...
android:configChanges="orientation|..."

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


1
这难道不会强制要求 API > 12 的用户在 12 上进行渲染,然后 API > 17 = 不安装吗?我不太确定这是否是一个解决方法。 - WiseGuy

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