我是看物業動畫的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