Over a million developers have joined DZone.

Ice Cream Sandwich, how does it affect app design?

DZone 's Guide to

Ice Cream Sandwich, how does it affect app design?

· Java Zone ·
Free Resource

Google's announcement of Ice Cream Sandwich (ICS), the latest version of the world's number one mobile OS, happened last week. The version number was bumped up from 3.2 to 4.0 reflecting the number of changes in the OS. As they promised in the Google I|O the latest version of Android now merges the Honeycomb tablet OS with the main branch and brings us one unified OS that will run on phones and tablets (end TVs later).

So how do the new features affect how we should design and build apps?

Unified OS
This is the big difference between the older versions and ICS. From now on all kinds of devices will run one OS. As a developer differentiation between tablet and phone can only be done using screen dimensions. 

I believe we should start thinking about Android app design similarly we think about responsive web design. We have around 500 different Android devices out there today ( Andy Rubin at AsiaD 2011) and the number is growing fast. It is already impossible to tell exactly which devices are tablets and which ones are phones.
Is Samsung Note with its 5.2" screen a tablet or a phone?

In AsiaD 2011 Andy Rubin also said that there won't be a separate Android Market section for tablet apps. If apps are written correctly they will scale up nicely and support larder screens. Android APIs allow us to do  this!

"You can't think about having one screen size. Phones and tablets have different sized displays -- that's why the Android Market doesn't have segments of apps that specifically run on phones and specifically on tablets."
Andy Rubin AsiaD 2011

Starting from Android version 3.2 Google already deprecated the screen size categories. From now on we should start using the new size qualifiers. This approach is very similar what we have go used to in the world of Internet browsers and CSS media queries.

I will definitely be writing more about responsive design for Android later but there are already many good articles worth checking out:

Responsive mobile design by Kirill Grouchnikov
Preparing for Handsets by Scott Main
Thinking Like a Web Designer by Roman Nurik

New UI components
Action Bar is now permanent part of Android APIs. Here is an example from Android Developer page explaining how to make Action Bar backwards compatible. Using this API makes tons of sense. It will automatically adapt to larger tablet screens and smaller phone screens.

ViewPager (Workspaces UI design pattern) is also more common place now. Although introduced already before ICS the latest release has made it more common. See  this post in Android Developers blog for more details.

New gestures
As part of the default UI functionality users will now use horizontal swiping with notifications and multitasking to dismiss a notification or close an app. Swipe gesture was used before but it wasn't widely used for this purpose.

Notifications and multi-tasking are features that users are going to use very frequently. It is safe to assume that users will get used to the "dismiss by swiping" very soon and it can be used in apps when similar functionality is needed. 

Improved voice controls
The latest release also improves Android's voice input. Including more natural voice input in apps is now possible.

Face recognition APIs
The face unlocking feature isn't particularity useful feature as such. However, the API is open and allows easy integration of automatic face recognition to apps.

More NFC support
NFC support was introduces a while ago but in the latest version Google introduces Beam that allows transmitting data from one phone to another by touching them together. Beam functionality can be included in apps using Android APIs.

New default font
Android now has a new font called "Roboto".  The font has been designed

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}