tackling android fragmentation dev : mobile 2012 @ glennbech , inmeta consulting
DESCRIPTION
Tackling Android Fragmentation Dev : Mobile 2012 @ Glennbech , Inmeta consulting. 16 klocs – not rocket science. Source: Twitter / http ://en.wikipedia.org/wiki/Mobile_operating_system#Market_share. Nairobi. HTC 3G SLIDE. X. Got Gingerbread May 2011. On sale May 2010. - PowerPoint PPT PresentationTRANSCRIPT
Tackling Android Fragmentation
Dev:Mobile 2012 @Glennbech , Inmeta consulting
16 klocs – not rocket science
Source: Twitter / http://en.wikipedia.org/wiki/Mobile_operating_system#Market_share
Nairobi
HTC 3G SLIDE
On saleMay 2010
Got GingerbreadMay 2011
X
Situation report June 2012Android• ICS 7.3% (All versions)• Honeycomb 2.7%• Gingerbread (2.3) dominant @ 65%• Froyo (2.2) still at 19.1 %• As of February 2012 Phones with no
ICS upgrade plan still sold• This will continue
iOS• 61% on iOS 5 or above in 15. days!
Source: http://developer.android.com/resources/dashboard/platform-versions.html
WHO CARES?
Agenda
«Prove that it is feasable, and not overly difficult to, write single APK, native android apps that works well across android versions and form
factors»
ICS/Honeycomb
tabs
ActionBar& Home
Navigation
Action Items
ViewPager
https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo
ContextualActionbar
https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo
Tab Navigation
… with ListView
multiselect
https://play.google.com/store/apps/details?id=com.glennbech.nutrinfo
Android versions
Situation report June 2012Android• ICS 7.3% (All versions)• Honeycomb 2.7%• Gingerbread (2.3) dominant @ 65%• Froyo (2.2) still at 19.1 %• As of February 2012 Phones with no
ICS upgrade plan still sold• This will continue
iOS• 61% on iOS 5 or above in 15. days!
Source: http://developer.android.com/resources/dashboard/platform-versions.html
Androidmanifest.xml
<uses-sdk android:minSdkVersion=”7"android:targetSdkVersion="14” />
Example. Hello worldpublic class TargetSDKVersionExample extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; }}
Example. Menu.xml
<menu ><item android:id="@+id/menu_save«
android:icon="@drawable/ic_menu_save"android:title="@string/menu_save"
android:showAsAction="ifRoom|withText" /></menu>
ICS Gingrerbread
Androidmanifest.xml
<uses-sdk android:minSdkVersion=”7"android:targetSdkVersion="10” />
ICS Gingrerbread
Android Support Libraries
• Official Android 3 & 4 features backported• Very simple to use; download using SDK manager and include
JAR file in project Includes • Fragment API & DialogFragment• Loader API• ViewPager, Pager Adapter & FragmentPagerAdapter• SearchView
• Simple Actionbar implementation provided in samples
source: http://developer.android.com/sdk/compatibility-library.html#SettingUp
Limitations of the support libraries• No action bar
• Code «infection»
• Cannot extend MapActivity since you have to extends custom Activity class
ActionbarSherlock• Written by Jake Whorton• Easy to use (git clone)• Includes & based on support libraries • Elaborate. Support for wide range of
Honeycomb and ICS features • Actionbar• Navigation Modes, Tabs and spinners in the
action bar.• Contextual Action Bar / ActionMode
The ICS feature "split action bar“
• Plugin for MapActvity (!)• www.actionbarsherlock.com• Apache License Version 2.0
ActionbarSherlock #1 IDE
Hello world
A quick summary
• We have used the support libraries, through ActionBarSherlock to get ICS looking apps on pre-ICS phones (back to 1.6 supported)
• The price• Must use a custom theme• Must extends SherlockActivity classes• Must use overloaded methods, and use getSuppportMenuInflater() etc.
Fragments
Fragments crash courseWHAT• Introduced in Android 3.0 • Reusable UI components• Have their own lifecycle• Can add their own items to actionbar etc. WHY• Code Reuse• Fragments are integrated into the ICS SDK
Why - Reuse
http://developer.android.com/guide/topics/fundamentals/fragments.html
Actionbar uses TabListeners for tab navigation
onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
Source: http://developer.android.com/reference/android/app/ActionBar.TabListener.html
Using fragments - example • Declared in layout• Added/removed from code using FragmentManager
Extreme client programming
Density and Size
HTC Sensation
Button (100dpx100dp)
Samsung Galaxy Tab 10.1
Huawei IDEOS
Definitions
• xlarge screens are at least 960dp x 720dp.• large screens are at least 640dp x 480dp.• normal screens are at least 470dp x 320dp.• small screens are at least 426dp x 320dp
Best Match layout picking
• Excellent support for providing resources based on device configuration
• Versions• mcc310-mnc004 (US/Verizon)• Car/desk (docking)• Night mode• ETC
Source: http://developer.android.com/guide/topics/resources/providing-resources.html
In practice
• Provide differnet layout for different screens and orientations - backed by the same activity
• Provide a different Activity class for a different device/layout. Example one for phone and one for tablet
Dispatch Activity idiom
DispatchActivity
(condition)
PhoneActivity
TabletActivity
Intent
New Intent
New Intent
Conclusion
• The Android OS and devices are both forward- and backwards compatible in regard to OS versions
• Android has excellent support for layout on devices with different screen sizes and densities
• By using the ActionbarSherlock/Fragment activities you can write code that use fragments and deploy on tablets and phones
• By using ActionbarSherlock you can get the «ICS look» on your Android 1.X + devices today. Including the kindle fire.
“I am an old man and have known a great many troubles, but most of them never happened” – Mark Twain