我在我的應用程序中實現了片段。爲了保持Android版本的兼容性低於Honeycomb,我使用支持庫。 但是我想知道,Android是否如此聰明,以至於當應用程序在Honeycomb或更高版本上運行時,它會使用正確的框架更改支持庫方法? 如果不是,有沒有辦法使用較低版本的支持庫方法和較高版本的框架方法?如何使用框架方法和支持庫的方法
回答
支持庫不是別的,而是原來的框架,它向後兼容老版本的Android。在較舊的框架中沒有可用的新API,因此它總是比較應用程序運行的當前Android版本,並根據這一版本,自定義實現或本機版本進行比較。支持LIB的例子:
final int version = android.os.Build.VERSION.SDK_INT;
if (version >= 17) {
IMPL = new JbMr1ViewCompatImpl();
} else if (version >= 16) {
IMPL = new JBViewCompatImpl();
} else if (version >= 14) {
IMPL = new ICSViewCompatImpl();
} else if (version >= 11) {
IMPL = new HCViewCompatImpl();
} else if (version >= 9) {
IMPL = new GBViewCompatImpl();
} else {
IMPL = new BaseViewCompatImpl();
}
支持LIB定製,以彌補丟失的API爲Android的每個版本,比如你可以在這個截圖中看到:
你可以找到在Github上鏡像的支持庫的源代碼: https://github.com/android/platform_frameworks_support
謝謝你的回答!這很清楚。但如果是這樣,爲什麼我必須使用片段調用getSupportFragmentManager()而不是getFragmentManager()?我的意思是,按照你的解釋,應該只有一個回調來獲得FragmentManager。 –
通過調用'getSupportFragmentManager()'你將使用庫。因此,如果您的應用正在運行API Level 17,那麼lib將使用本機實現,但是如果您的應用在API Level 10上運行,那麼支持庫將使用庫中實現的片段。 – Ahmad
好的,謝謝。最後一個問題:那麼你是否建議爲每個應用程序使用支持庫? –
- 1. 不支持不使用停止()方法不支持的線程方法
- 2. 任何使Kinetic.js支持IE8的方法?
- 3. 實體框架避開不支持的方法
- 4. 實體框架:指定的方法不支持
- 5. 模擬框架,支持以委託爲參數嘲諷方法
- 6. 不支持的方法:GradleProject.getBuildScript()
- 7. 列表支持的方法
- 8. 不支持的方法:BaseConfig.getApplicationIdSuffix()
- 9. 支持iOS6和iOS7的最佳方法?
- 10. stepUp和stepDown方法支持的測試
- 11. 支持方法和他們的目標
- 12. C#框架方法
- 13. 使用post方法的restlet框架
- 14. 實體框架 - 是MS將要刪除支持數據庫優先方法
- 15. Sencha無法找到支持的框架
- 16. 支持測試類和測試方法排序的測試框架
- 17. 使用Android支持庫的簡單方法?
- 18. 實體框架和數據庫支持
- 19. 如何檢查我是否使用了不支持的方法?
- 20. 對象不支持方法
- 21. 蜂巢方法不支持
- 22. Enumerable.Any方法不支持
- 23. 不支持wget http方法
- 24. Gremlin綁定方法支持
- 25. MethodOverride - 「方法不支持」?
- 26. 不支持方法'POST'405
- 27. 不支持「等於」方法
- 28. 不支持ToString()方法
- 29. 單()方法不支持
- 30. 不支持Xamarin PushAsync方法
我認爲沒有這樣的事情。 –