顯示具有 demo sample. 標籤的文章。 顯示所有文章
顯示具有 demo sample. 標籤的文章。 顯示所有文章

2012年7月13日 星期五

About Google Support Library

我寫for android 3.0以上的程式要如何兼容於 android 3.0以下的手機呢?

Android 3.0 (HoneyComb) 前後在UI上有很大的更動,Google針對UI的部份提供了一些向前相容的辦法,像是Support Library v4。下圖便是同樣一支Support Library v4 demo sample 跑在4.0.4(左)與2.3.5(右)的差異。





這可以讓 Android 1.6以後的手機都能夠支援你針對android 3.0以上版本寫的app,Google提供了lib作自動轉換的動作。Google的 Support Library 支援以下幾種UI元件:




(Cited from http://developer.android.com/tools/extras/support-library.html)

有興趣的人可以參考一下 SDK/extras/android/support/ 的samples。 以 Support4Demos 為例,以下有幾點要注意一下:

  • If you add  "android-support-v4.jar" to the path Properties ->Java Build Path ->Libraries , please remember check the jar file in tab"Order and Export." Or you will see the errors.*1 (請記得要勾選 Order and Export內的lib檔案否則你會看見如*1附註的錯誤)
  • Please set the attributes for USE SDK like following: 
             uses-sdk android:minSdkVersion= 4 
             android:targetSdkVersion=" 11 "     (IF YOU USE V4 LIB)
  • Please set your "android target" beyond v.11.

第三點是因為Support4Demo的sample內的res/values-v11/下的sytles.xml在V 11以下不認得,因此無法build出來。使用V11以上的版本就好了。

不過ActionBar 卻未在支援之列,這部份就要參考一下SDK Samples下的 ActionBarCompat 範例。

*1 Errors from no export the library:

07-13 15:32:03.056: E/dalvikvm(5006): Could not find class 'com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView$1', referenced from method com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView.installAccessibilityDelegate


07-13 15:32:03.086: E/AndroidRuntime(5006): FATAL EXCEPTION: main
07-13 15:32:03.086: E/AndroidRuntime(5006): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.supportv4/com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.ActivityThread.access$1500(ActivityThread.java:135)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.os.Handler.dispatchMessage(Handler.java:99)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.os.Looper.loop(Looper.java:150)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.ActivityThread.main(ActivityThread.java:4385)
07-13 15:32:03.086: E/AndroidRuntime(5006): at java.lang.reflect.Method.invokeNative(Native Method)
07-13 15:32:03.086: E/AndroidRuntime(5006): at java.lang.reflect.Method.invoke(Method.java:507)
07-13 15:32:03.086: E/AndroidRuntime(5006): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
07-13 15:32:03.086: E/AndroidRuntime(5006): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
07-13 15:32:03.086: E/AndroidRuntime(5006): at dalvik.system.NativeStart.main(Native Method)
07-13 15:32:03.086: E/AndroidRuntime(5006): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.createView(LayoutInflater.java:518)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
07-13 15:32:03.086: E/AndroidRuntime(5006): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:250)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.Activity.setContentView(Activity.java:1742)
07-13 15:32:03.086: E/AndroidRuntime(5006): at com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity.onCreate(AccessibilityDelegateSupportActivity.java:47)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
07-13 15:32:03.086: E/AndroidRuntime(5006): ... 11 more
07-13 15:32:03.086: E/AndroidRuntime(5006): Caused by: java.lang.reflect.InvocationTargetException
07-13 15:32:03.086: E/AndroidRuntime(5006): at java.lang.reflect.Constructor.constructNative(Native Method)
07-13 15:32:03.086: E/AndroidRuntime(5006): at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
07-13 15:32:03.086: E/AndroidRuntime(5006): at android.view.LayoutInflater.createView(LayoutInflater.java:505)
07-13 15:32:03.086: E/AndroidRuntime(5006): ... 21 more
07-13 15:32:03.086: E/AndroidRuntime(5006): Caused by: java.lang.NoClassDefFoundError: com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView$1
07-13 15:32:03.086: E/AndroidRuntime(5006): at com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView.installAccessibilityDelegate(AccessibilityDelegateSupportActivity.java:73)
07-13 15:32:03.086: E/AndroidRuntime(5006): at com.example.android.supportv4.accessibility.AccessibilityDelegateSupportActivity$AccessibilityDelegateSupportView.(AccessibilityDelegateSupportActivity.java:62)
07-13 15:32:03.086: E/AndroidRuntime(5006): ... 24 more