2012-12-13 41 views
1

我在我的應用程序中實現了片段。爲了保持Android版本的兼容性低於Honeycomb,我使用支持庫。 但是我想知道,Android是否如此聰明,以至於當應用程序在Honeycomb或更高版本上運行時,它會使用正確的框架更改支持庫方法? 如果不是,有沒有辦法使用較低版本的支持庫方法和較高版本的框架方法?如何使用框架方法和支持庫的方法

+0

我認爲沒有這樣的事情。 –

回答

1

支持庫不是別的,而是原來的框架,它向後兼容老版本的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的每個版本,比如你可以在這個截圖中看到:

enter image description here

你可以找到在Github上鏡像的支持庫的源代碼: https://github.com/android/platform_frameworks_support

+0

謝謝你的回答!這很清楚。但如果是這樣,爲什麼我必須使用片段調用getSupportFragmentManager()而不是getFragmentManager()?我的意思是,按照你的解釋,應該只有一個回調來獲得FragmentManager。 –

+0

通過調用'getSupportFragmentManager()'你將使用庫。因此,如果您的應用正在運行API Level 17,那麼lib將使用本機實現,但是如果您的應用在API Level 10上運行,那麼支持庫將使用庫中實現的片段。 – Ahmad

+0

好的,謝謝。最後一個問題:那麼你是否建議爲每個應用程序使用支持庫? –