我是看物业动画的Android开发者视频(https://www.youtube.com/watch?v=3UbJhmkeSig)当我跑进这是很容易解决,但我很难理解一个问题,希望有人能照一些轻于它的我..当代码需要特定的API级别时,为什么必须对Build.Version进行检查而不是要求相同或高于要求的级别?
我有一个针对清单中API级别8的项目,因此当我使用下面的代码时,我得到一个错误,指出使用的代码需要比当前目标API级别更高的API级别。作为解决方案,我在运行时检查了Build版本(http://developer.android.com/training/basics/supporting-devices/platforms.html),并且只在API级别满足时才运行代码段。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
ObjectAnimator rotateAnimation = ObjectAnimator.ofFloat(resp1, View.ROTATION, 270);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
rotateAnimation.setRepeatCount(0);
}
}
当我添加第一个,最外层的if语句时,我感到困惑。代码行
ObjectAnimator rotateAnimation = ObjectAnimator.ofFloat(resp1, View.ROTATION, 270);
需要API等级14,因此我检查Build.Version.ICS的原因。然而,该方法中的“setRepeatCout()”从代码行方法
rotateAnimation.setRepeatCount(0);
需要API 11,虽然放置在第一,最外面的if语句内与支架以确保的块,而不是一条线,我IDE(IntelliJ IDEA)仍然向我提供了错误,指出该代码行需要API 11和我的项目目标API 8.我的两个解决方案是将代码放入两个嵌套的if语句中,一个检查API 14和另一个API 11,或者在方法开始时使用
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
注释。但是,我并不完全理解注释,它是如何影响旧设备的,我也不明白为什么我需要两条if语句来检查Build版本。
@TargetAPI干脆干掉lint检查,还是以某种方式影响整个方法以及它是否编译/运行?
- 为什么我需要使用两个if语句?为什么第一条if语句不足以满足这两行代码?
- 是否有理由需要使用两个if语句来检查构建还是这可能是一个错误?我试着在https://youtrack.jetbrains.com/issues/IDEA搜索已知的错误并在谷歌搜索结果。
非常感谢
当使用两个if语句时,我没有使用targetapi注释。我会使用最外层的if语句和targetAPI注释或两个if语句,但不能同时使用两个if语句和注释。我假设外部if语句将适用于if块中的所有内容..?对不起,“两个地点”我的意思是两个if语句,而不是if语句和注释。 – cjayem13 2014-10-04 16:09:12
@ cjayem13:“我是在假设外部if语句适用于if块内的所有内容??” - 它的确如此。 – CommonsWare 2014-10-04 16:09:57
好的,那很好。至少我不会疯狂大声笑。我想这必须是某种类型的错误,如果一个代码段需要api 11,而另一个需要api 14,则检查api 14或更高版本应该足以满足这两个要求。事实上,我必须在验证用户后检查api 11是否在api 14上,这对我来说似乎是绝对荒谬的。idk,我想我会向Intellij报告错误,看看会发生什么..感谢您的帮助 – cjayem13 2014-10-04 16:12:45