我希望在屏幕方向更改时避免重新启动活动。在较旧的sdk版本中,它由configChanges="orientation"
(在清单中)完成。在较新版本中添加了screenSize
。
我的minSdk是8,targetSdk是17,我发现自己处于一种奇怪的情况:我无法将screenSize放入configChanges(因为minSdk),但是我的手机(4.1)将会破坏方向更改的任何活动(因为targetSdk)。
有什么出路吗?我可以以某种方式防止这种破坏,而不必针对过时的Sdk(但仍然将它作为minSdk中的一个选项)?
答案 0 :(得分:0)
啊我终于找到了解决方案:
当我们指定android:configChanges =“screenSize”时,我们无法使用screenSize属性影响“已建议的解决方案”,因为eclipse在screenSize 上触发xml解析错误,如果我们在targetSdkVersion 12中指定或者更少的android os不会重新启动方向更改活动。 (我现在也知道并且正在使用targetSdkVersion来识别最大支持的sdk版本。但是当我再次研究这个时,有maxSdkVersion。)
所以通过这个设置:
uses-sdk android:minSdkVersion="10" android:targetSdkVersion="12" android:maxSdkVersion="17" ... android:configChanges="orientation|..."
Os不会重新启动方向更改活动,应用程序仍将支持最小和最大sdk版本,但将在兼容模式下运行sdk 12,这是sdk的最高版本,不会重新启动活动,这将解决上述问题。
答案 1 :(得分:0)
您可以保留android:minSdkVersion
和android:targetSdkVersion
的当前状态(在示例中为8和17)。
为了能够将screenSize
放入configChanges
,请更改此行
target=android-someapinumber
project.properties
文件中的。选择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.
}