Android Fragment-Awesome

34
Android Fragment-Awesome Matthew Gaunt

description

A talk I gave at the Brighton iOS developer group on dealing with Android screen sizes.

Transcript of Android Fragment-Awesome

Page 1: Android Fragment-Awesome

AndroidFragment-Awesome

Matthew Gaunt

Page 2: Android Fragment-Awesome

Who is this guy?

• Master in Computer Science in Bristol

• Senior Android Dev @ Mubaloo

• Cross Platform Dev @ Future Platforms

Page 3: Android Fragment-Awesome

What Fragmentation?

Page 4: Android Fragment-Awesome

What’s coming up

• Design - I can haz pretty

• Dips

• Buckets?

• What buckets?

• The story of buckets

• Tips + Examples

Page 5: Android Fragment-Awesome

Dips

Density Independent Pixels

Abstract the screen size (think rounded corner rectangle)

Never assume dip > pixels

Page 6: Android Fragment-Awesome

Buckets?

ldpi mdpi hdpi xhdpi

Page 7: Android Fragment-Awesome

What Buckets?

Screen density (ldpi, mdpi, hdpi, xhdpi)

Orientation (port, land)

Android Version (v4, v11)

Screen size (small, normal, large, xlarge)

Page 8: Android Fragment-Awesome

Eeks lots of Images

Page 9: Android Fragment-Awesome

How to use Buckets

• Images - [ldpi, mdpi, hdpi, xhdpi] [small, normal, large, xlarge]

• Layout - [land, port]

• Themes / Styles - [v4, v11]

• Dimensions - [small, normal, large, xlarge]

Page 10: Android Fragment-Awesome

The History...

Page 11: Android Fragment-Awesome

The History...

<port>land

1.5

Page 12: Android Fragment-Awesome

The History...

<port>land

1.5 1.6

ldpimdpihdpi

Page 13: Android Fragment-Awesome

The History...

<port>land

1.5 1.6

ldpimdpihdpi

3.0 (ish)

smallnormallargexlarge

Page 14: Android Fragment-Awesome

The History...

<port>land

1.5 1.6

ldpimdpihdpi

3.0 (ish)

smallnormallargexlarge

4.0

ldpimdpihdpi

xhdpi

Page 15: Android Fragment-Awesome

Recap

• Lots of buckets

• Lots of resources to apply the buckets to

• How it relates to other platforms like iOS

Page 16: Android Fragment-Awesome

Random.

Page 17: Android Fragment-Awesome

Phones / Tablets?ldpi mdpi hdpi xhdpi total

SmallNormalLargeXLarge

1.7% 2.4% 4.1%0.7% 18.5% 66.3% 2.5% 88.0%0.2% 2.8% 3.0%

4.9% 4.9%

ldpimdpihdpixhdpi

Phonesnormal / small

mdpi? hdpi ?? xhdpi ?

Tabletslarge / xlarge

Page 18: Android Fragment-Awesome

Hitting Both?

drawable

drawable-ldpi

drawable-mdpi

drawable-hdpi

drawable-xhdpi

drawable-large-?

drawable-xlarge-?

For all buckets

Base

Additional

Page 19: Android Fragment-Awesome

Tips to Reduce Work

1Use values everywhere (dimens, ints, etc.)

Page 20: Android Fragment-Awesome

Tips to Reduce Workvalues

dimens.xml<resources>

        <dimen name="default_text_size">20sp</dimen>        <dimen name="default_large_text_size">30sp</dimen>        <dimen name="splash_vertical_spacing">20dp</dimen>        <dimen name="gauntface_tag_bottom_spacing">20dp</dimen>        <dimen name="gauntface_tag_padding">5dp</dimen>        <dimen name="gauntface_tag_radius">10dp</dimen>        <dimen name="splash_gauntface_progress_bar">30dp</dimen>        <dimen name="generic_dialog_padding">15dp</dimen>        <dimen name="generic_dialog_bg_radius">4dp</dimen>        <dimen name="generic_dialog_title_spacer_height">4dp</dimen>        <dimen name="generic_dialog_title_spacer_vertical_spacing">10dp</dimen>        <dimen name="sync_info_padding">10dp</dimen>        <dimen name="sync_info_title_text_size">35sp</dimen>        <dimen name="sync_info_msg_text_size">20sp</dimen>        <dimen name="sync_info_bg_radius">10dp</dimen>        <dimen name="sync_info_prof_pic_radius">8dp</dimen>        <dimen name="sync_info_prof_pic_size">128dp</dimen>    </resources>

values-landdimens.xml

<resources>        <dimen name="default_text_size">15sp</dimen>        <dimen name="default_large_text_size">25sp</dimen>        <dimen name="splash_vertical_spacing">10dp</dimen>    </resources>

Page 21: Android Fragment-Awesome

Tips to Reduce Workvalues values-land

Page 22: Android Fragment-Awesome

Tips to Reduce Work

2Learn the ways of the

nine patch

Page 23: Android Fragment-Awesome

Tips to Reduce Work

Page 24: Android Fragment-Awesome

Tips to Reduce Work

3Use <Shape> drawables

Page 25: Android Fragment-Awesome

Tips to Reduce Work

<shape    xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <gradient        android:angle="0"        android:endColor="@color/dark_blue"        android:gradientRadius="660"        android:startColor="@color/splash_light_blue"        android:type="radial" /></shape>

Page 26: Android Fragment-Awesome

Tips to Reduce Work

Page 27: Android Fragment-Awesome

Tips to Reduce Work

4Use Themes & Styles

www.gauntface.co.uk/blog/2011/01/18/android-ui-reference

Page 28: Android Fragment-Awesome

Tips to Reduce Workvalues

themes.xml<resources>

<style name="Theme.FacebookSync" parent="@style/Theme.FacebookSync.Support">        ...    </style>    <style name="Theme.FacebookSync.NoTitleBar">        ...    </style>    <style name="Theme.FacebookSync.Dialog" parent="@style/Theme.Dialog.Support">        ...

</style></resources>

values-v11themes-v11.xml

<resources>    <style name="Theme.FacebookSync.Support" parent="@android:style/Theme.Holo"></style>    <style name="Theme.Dialog.Support" parent="@android:style/Theme.Holo.Dialog"></style></resources>

values-v4themes-v4.xml

<resources>    <style name="Theme.FacebookSync.Support" parent="@android:style/Theme.NoTitleBar"></style>    <style name="Theme.Dialog.Support" parent="@android:style/Theme.Dialog"></style></resources>

Page 29: Android Fragment-Awesome

Tips to Reduce Work

Page 30: Android Fragment-Awesome

Tips to Reduce Work

5Give up control - be fluid

Page 31: Android Fragment-Awesome

Tips to Reduce WorkNote: Not the best example ;)

Page 32: Android Fragment-Awesome

Tips to Reduce Work

Page 33: Android Fragment-Awesome

You’re Results May Vary