SlideShare ist ein Scribd-Unternehmen logo
1 von 85
www.immobilienscout24.de

Best Practices to develop for
different Android Device Classifications

Droidcon | Amsterdam | 26.11.2013 | Hasan Hosgel
About me

+Hasan Hosgel
Twitter: @alosdev
Github:
alosdev
Slideshare: hosgel
CO-Organizer @ GDG
Android in Berlin
& community events
developer @
ImmobilienScout24

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
About ImmobilienScout24

Germany’s largest real
estate listing company.
> 10 Mio. Monthly unique
users
> 1.5 Mio. real estates
> 300 Mio. detail views
> 1500 Servers
~ 6.5 Mio. App downloads
~ 3 Mio. Android
~ 50% mobile traffic

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Fragmentation

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Fragmentation

> 4400 Android Devices

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Here comes The Nightmare

Image source:
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.com/photos/boogeyman13/4553188509/
Here comes The Nightmare

For developers
Image source:
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.com/photos/boogeyman13/4553188509/
Let’s build the fundament

Image source:
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.com/photos/hertenberger/1434191066/
Device Classification

Images sources:
https://play.google.com/store/devices

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Device Classification

Images sources:
https://play.google.com/store/devices
http://www.htc.com/de/

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Device Classification

Images sources:
http://www.sony.de/hub/google-tv

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Device Classification

Images Sources
https://developer.ford.com/

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Wearables

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Glass

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Hard Work Ahead

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel

Source: http://www.flickr.com/photos/16210667@N02/9172895225
Resource Folders

You can use several qualifiers in the resource
folders name for serving the best matching
resource.

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Qualifiers

● Language (-en)
● Language & Region (-en-rUS)
● Smallest Width (–sw600dp)
● Screensize (-small, -normal, -large)
● Screen Orientation (-port, -land)
● Screen Pixel Densitiy (-hdpi, -xhdpi, -xxhdpi)
● Platform Version (-v11, -v13)

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Best Matching Resources Win

1.res/values/strings.xml
2.res/values-en-rUS/strings.xml
3.res/values-large/strings.xml
4.res/values-sw600dp/strings.xml

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Best Matching Resources Win

1.res/values/strings.xml
2.res/values-en-rUS/strings.xml
3.res/values-large/strings.xml
4.res/values-sw600dp/strings.xml
The order of the qualifiers in the previous slides gives
the ranking, if two resources have the same matching
number of qualifiers.

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Images Resources

• Use the different qualifiers for the screen pixel
density (mdpi, hdpi, etc.)
• If you are forced to use text on images use
language and region (en, es-rUS, en-rUS, etc.)
• Better approach is to use 9-patch drawables,
which stretches automatically depending on the
content inside.
• You must provide different launcher icons for
Froyo, Honeycomb and above? Use the platform
version. (v4, v11, v14)

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)
project-folder/res/

layout/

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)
project-folder/res/

layout/

 small phones

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)
project-folder/res/

layout/

 small phones

layout-sw320dp/

 other phones

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)
project-folder/res/

layout/

 small phones

layout-sw320dp/

 other phones

layout-sw600dp/

 tablets 7”

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)
project-folder/res/

layout/

 small phones

layout-sw320dp/

 other phones

layout-sw600dp/

 tablets 7”

layout-sw720dp/

 tablets 10”

* You should also use the orientation qualifier

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Platform version at lower v11
project-folder/res/
layout/

 phones

layout-sw320dp/

 other phones

layout-sw600dp/

 tablets 7”

layout-sw720dp/

 tablets 10”

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Platform version at lower v11
project-folder/res/
layout/

 phones

layout-v11/

 tablets 10”

layout-sw320dp/

 other phones

layout-sw600dp/

 tablets 7”

layout-sw720dp/

 tablets 10”

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Platform version at lower v11
project-folder/res/
layout/

 phones

layout-v11/

 tablets 10”

layout-v13/

 small phones

layout-sw320dp/

 other phones

layout-sw600dp/

 tablets 7”

layout-sw720dp/

 tablets 10”

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Hint

The smallest width qualifier gets automatically
platform version ”-v13” through the packager,
for avoiding problems with the number of
matching qualifiers.

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Howto Classify In Code

• Read configuration from the device

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Howto Classify In Code

• Read configuration from the device
• Smarter approach is to use boolean resources

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
project-folder/res/values/layouts.xml
<resources>

</resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
project-folder/res/values/layouts.xml
<resources>
<bool

>

</bool>

</resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">

</bool>

</resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">true</bool>

</resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">true</bool>
<bool name="is_phone_other">false</bool>

<bool name="is_tablet_7">false</bool>
<bool name="is_tablet_10">false</bool>
</resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">true</bool>
<bool name="is_phone_other">false</bool>

<bool name="is_tablet_7">false</bool>
<bool name="is_tablet_10">false</bool>
</resources>
Usage in code:
getResources().getBoolean(R.bool.is_phone_small)
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Current Layout File Structure

project-folder/res/
layout/main.xml
layout-v11/main.xml
layout-v13/main.xml
layout-sw320dp/main.xml
layout-sw600dp/main.xml
layout-sw720dp/main.xml

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Current Layout File Structure

project-folder/res/
layout/main.xml
layout-v11/main.xml
layout-v13/main.xml
layout-sw320dp/main.xml
layout-sw600dp/main.xml
layout-sw720dp/main.xml
Fixing one bug in the 10“ layout has to be done in two files.

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Current Layout File Structure

project-folder/res/
layout/main.xml
layout-v11/main.xml
layout-v13/main.xml
layout-sw320dp/main.xml
layout-sw600dp/main.xml
layout-sw720dp/main.xml
Fixing one bug in the 10“ layout has to be done in two files.
 error prone

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Resource Alias

Put your layout files in the default folder.
project-folder/res/
layout/main_phone_small.xml

layout/main_phone_other.xml
layout/main_tablet_7.xml
layout/main_tablet_10.xml

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Resource Alias

2. Create an item with the needed
classification in the previously defined values
folder.

project-folder/res/valuessw720dp/layouts.xml
<resources>

</resources>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Resource Alias

2. Create an item with the needed
classification in the previously defined values
folder.

project-folder/res/valuessw720dp/layouts.xml
<resources>

<item

>
</item>

</resources>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Resource Alias

2. Create an item with the needed
classification in the previously defined values
folder.

project-folder/res/valuessw720dp/layouts.xml
<resources>

<item name="main"

>
</item>

</resources>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Resource Alias

2. Create an item with the needed
classification in the previously defined values
folder.

project-folder/res/valuessw720dp/layouts.xml
<resources>

<item name="main" type="layout">
</item>
</resources>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Resource Alias

2. Create an item with the needed
classification in the previously defined values
folder.

project-folder/res/valuessw720dp/layouts.xml
<resources>

<item name="main" type="layout">
@layout/main_tablet_10.xml</item>
</resources>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Use <includes>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage Includes

<LinearLayout … >
…
…
</LinearLayout>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage Includes

<LinearLayout … >
…
<include
…
</LinearLayout>

/>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage Includes

<LinearLayout … >
…
<include layout="@layout/footer"/>
…
</LinearLayout>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Use <includes>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Use <includes>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Create custom view

Use <includes>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom View

public class CustomView extends LinearLayout {
…
public CustomView(Context context, AttributeSet attrs)
{
…
addView(createTextView(context, "label"), lp);
addView(createTextView(context, "desc"), lp);
if(getResources().getBoolean(R.bool.is_phone)){
setOrientation(VERTICAL);
} else {
setOrientation(HORIZONTAL);
}
}
…
}
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage CustomView in layout file

<LinearLayout … >
…

…
</LinearLayout>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage CustomView in layout file

<LinearLayout … >
…
<de.alosdev.CustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
…
</LinearLayout>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Create custom view

Use <includes>
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom XML Attribute
<resources>
<declare-styleable

>

</declare-styleable>
<resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">

</declare-styleable>
<resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">
<attr

</declare-styleable>
<resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel

/>
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">
<attr name="label"

</declare-styleable>
<resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel

/>
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">
<attr name="label" format="reference|string"/>

</declare-styleable>
<resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">
<attr name="label" format="reference|string"/>
<attr name="value" format="reference|string"/>
<attr name="orientation" format="enum">
<enum name="horizontal" value="0"/>
<enum name="vertical" value="1"/>
</attr>
</declare-styleable>
<resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage in layout resource

1. Add to root XML node
xmlns:app="http://schemas.android.com/apk/resauto"
2. Usage in custom view
<de.alosdev.CustomView
android:id="@+id/customView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:label="label 1"
app:orientation="vertical"
app:value="value 1" />

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Usage in code

public class CustomView extends LinearLayout {
static final int[] ORIENTATION = new int[] { HORIZONTAL, VERTICAL };
public CustomView(Context context, AttributeSet
attrs) {
super(context, attrs);
…
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.CustomView);
try {
setOrientation(ORIENTATION[
a.getInt(R.styleable.CustomView_orientation, 0)]);
} finally {
a.recycle();
}
}
…
}

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom XML Attribute

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom XML Attribute

If custom view has much more
business logic and need lifecycles
 Create a Fragment

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Code

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Best Practices

● You have already an application
Remove orientation fixation and
suppressing of orientation change from
manifest to avoid long bug analyzing.

● You start from the scratch

Focus on main classification for faster time
to market

But create an overall concept for better
modularization
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Best Practices

● If you support both orientations, save the
instance state while orientation changes for
more responsiveness
Especially for states, that need a long
computation for creation.
Make the state object Parcelable for faster
write & read and also to have a smaller

memory footprint

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Developer Hints

● You can start an activity for result from a
fragment, so the response can be handled in
the fragment.

● If you want to register a special service on
every onCreate method of an activity give the
ActivityLivecycleCallbacks a try. You can
register them in the onCreate method of the

application. (minSDK -v14)

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
● If you get a BadParcelableException with
the cause ClassNotFound-Exception, the
source can be a NullPointerException
during the read or write of the Parcelable.

Exceptions are hidden during the parcel
process.

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
If you want to use “match_parent” or
“wrap_content” in a dimension alias, you should use
“-1dp” or “-2dp”
project-folder/res/values/dimen.xml

<resources>
<dimen name="my_dimen>@dimen/match_parent</dimen>
<dimen name="match_parent">-1dp</dimen>
<dimen name="wrap_content">-2dp</dimen>

</resources>
project-folder/res/values-sw600dp/layout.xml
<resources>

<dimen name="my_dimen>300dp</dimen>
</resources>

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Listener Hell

If you have to many listeners or you think the
programming model is old school like the “goto
statements”. Give message/ event/ service
bus a try. For Android:
Otto from Square
EventBus from greenrobot

See also: Callbacks as our Generations' Go To
Statement
Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
Custom Theme & Style
Android Ui Utils
ActionBar Style Generator
Holo Color Generator
Mission Accomplished ?

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.com/photos/ianaberle/5729561934/
Mission Accomplished

Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.com/photos/ianaberle/5729561934/
Q&A

Page 84
Source: http://www.flickr.com/photos/21496790@N06/5065834411/
www.immobilienscout24.de

Thanks for your attention!
Contact:
+HasanHosgel
Twitter: @alosdev
Github: alosdev

Best Practices to develop for different Android Device Classifications
https://github.com/alosdev/multidevice-nightmare-demo
http://www.slideshare.net/hosgel/droidcon-nl-2013-best-practices-to-develop-fordifferent-android-device-classifications

Weitere ähnliche Inhalte

Andere mochten auch

Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...
Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...
Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...Global Risk Forum GRFDavos
 
第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える
第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える
第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考えるコーヒー プリン
 
куренкова полина, ученица 7а
куренкова полина, ученица 7акуренкова полина, ученица 7а
куренкова полина, ученица 7аshkola16
 
MPPL Chapter 2
MPPL Chapter 2MPPL Chapter 2
MPPL Chapter 2beiharira
 
книги прочитанные летом!
книги прочитанные летом!книги прочитанные летом!
книги прочитанные летом!shkola16
 
Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...
Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...
Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...Ari Septiawan
 
5 originálnych tipov na valentínsky darček
5 originálnych tipov na valentínsky darček5 originálnych tipov na valentínsky darček
5 originálnych tipov na valentínsky darčekVeronika Huláková
 

Andere mochten auch (8)

Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...
Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...
Analysis of multi-hazard risk to human life at County Level in the Yangtze Ri...
 
第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える
第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える
第10回放射能ゴミ焼却を考える学習会 2015-09-27 再エネはフクシマを救う?今木質バイオマス発電から考える
 
куренкова полина, ученица 7а
куренкова полина, ученица 7акуренкова полина, ученица 7а
куренкова полина, ученица 7а
 
MPPL Chapter 2
MPPL Chapter 2MPPL Chapter 2
MPPL Chapter 2
 
книги прочитанные летом!
книги прочитанные летом!книги прочитанные летом!
книги прочитанные летом!
 
Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...
Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...
Makalah tentang Hardisk - Akademi Manajemen Informatika dan Komputer Amik Mit...
 
Inheritance
InheritanceInheritance
Inheritance
 
5 originálnych tipov na valentínsky darček
5 originálnych tipov na valentínsky darček5 originálnych tipov na valentínsky darček
5 originálnych tipov na valentínsky darček
 

Ähnlich wie Droidcon nl 2013 best practices to develop for different android device classifications

Droidcon 2013 Multidevice Nightmare
Droidcon 2013 Multidevice NightmareDroidcon 2013 Multidevice Nightmare
Droidcon 2013 Multidevice NightmareHasan Hosgel
 
Droidcon 2013 multidevice nightmare
Droidcon 2013 multidevice nightmareDroidcon 2013 multidevice nightmare
Droidcon 2013 multidevice nightmareDroidcon Berlin
 
Android Developer Days 2013 - MultiDevice Nightmare
Android Developer Days 2013 - MultiDevice NightmareAndroid Developer Days 2013 - MultiDevice Nightmare
Android Developer Days 2013 - MultiDevice NightmareHasan Hosgel
 
Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...Hasan Hosgel
 
DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...
DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...
DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...Hasan Hosgel
 
Android App Development - 01 Introduction
Android App Development - 01 IntroductionAndroid App Development - 01 Introduction
Android App Development - 01 IntroductionDiego Grancini
 
Android Scripting
Android ScriptingAndroid Scripting
Android ScriptingJuan Gomez
 
Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017Ivo Neskovic
 
Whitepaper - Native App or HTML5
Whitepaper - Native App or HTML5Whitepaper - Native App or HTML5
Whitepaper - Native App or HTML5Dan Vitoriano
 
Get ready for new nexus devices
Get ready for new nexus devicesGet ready for new nexus devices
Get ready for new nexus devicesKetan Raval
 
Experience The Best Android Programming Training Here | LW India
Experience The Best Android Programming Training Here | LW IndiaExperience The Best Android Programming Training Here | LW India
Experience The Best Android Programming Training Here | LW IndiaVishakhaTalmale
 
Android App Development 08 : Support Multiple Devices
Android App Development 08 : Support Multiple DevicesAndroid App Development 08 : Support Multiple Devices
Android App Development 08 : Support Multiple DevicesAnuchit Chalothorn
 
Extending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptExtending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptRoy Clarkson
 
[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android TipsKenichi Kambara
 
Cluster of unreliable commodity hardware (couchdb) (2)
Cluster of unreliable commodity hardware (couchdb) (2)Cluster of unreliable commodity hardware (couchdb) (2)
Cluster of unreliable commodity hardware (couchdb) (2)Namitha Acharya
 

Ähnlich wie Droidcon nl 2013 best practices to develop for different android device classifications (20)

Droidcon 2013 Multidevice Nightmare
Droidcon 2013 Multidevice NightmareDroidcon 2013 Multidevice Nightmare
Droidcon 2013 Multidevice Nightmare
 
Droidcon 2013 multidevice nightmare
Droidcon 2013 multidevice nightmareDroidcon 2013 multidevice nightmare
Droidcon 2013 multidevice nightmare
 
Android Developer Days 2013 - MultiDevice Nightmare
Android Developer Days 2013 - MultiDevice NightmareAndroid Developer Days 2013 - MultiDevice Nightmare
Android Developer Days 2013 - MultiDevice Nightmare
 
Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...Mtc spring 2014 best practices to develop for different android device classi...
Mtc spring 2014 best practices to develop for different android device classi...
 
DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...
DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...
DevFest Istanbul 2014 - Developing for the Big Screen - from Android TV to Ch...
 
Android App Development - 01 Introduction
Android App Development - 01 IntroductionAndroid App Development - 01 Introduction
Android App Development - 01 Introduction
 
Android Scripting
Android ScriptingAndroid Scripting
Android Scripting
 
Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017
 
Whitepaper - Native App or HTML5
Whitepaper - Native App or HTML5Whitepaper - Native App or HTML5
Whitepaper - Native App or HTML5
 
Get ready for new nexus devices
Get ready for new nexus devicesGet ready for new nexus devices
Get ready for new nexus devices
 
divide and qonquer
divide and qonquerdivide and qonquer
divide and qonquer
 
Experience The Best Android Programming Training Here | LW India
Experience The Best Android Programming Training Here | LW IndiaExperience The Best Android Programming Training Here | LW India
Experience The Best Android Programming Training Here | LW India
 
Responsive mobile design
Responsive mobile designResponsive mobile design
Responsive mobile design
 
Android App Development 08 : Support Multiple Devices
Android App Development 08 : Support Multiple DevicesAndroid App Development 08 : Support Multiple Devices
Android App Development 08 : Support Multiple Devices
 
Extending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptExtending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScript
 
[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips
 
Couch DB
Couch DBCouch DB
Couch DB
 
Cluster of unreliable commodity hardware (couchdb) (2)
Cluster of unreliable commodity hardware (couchdb) (2)Cluster of unreliable commodity hardware (couchdb) (2)
Cluster of unreliable commodity hardware (couchdb) (2)
 
Multi Screen Hell
Multi Screen HellMulti Screen Hell
Multi Screen Hell
 
Android Minnebar
Android MinnebarAndroid Minnebar
Android Minnebar
 

Mehr von Hasan Hosgel

Android Developer Days 2014 How second screen can enhance your app
Android Developer Days 2014 How second screen can enhance your appAndroid Developer Days 2014 How second screen can enhance your app
Android Developer Days 2014 How second screen can enhance your appHasan Hosgel
 
MTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesMTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesHasan Hosgel
 
Android bootcamp 2013 Lists & Adapter
Android bootcamp 2013 Lists & AdapterAndroid bootcamp 2013 Lists & Adapter
Android bootcamp 2013 Lists & AdapterHasan Hosgel
 
Customer's Choice @ Moosecon 2013
Customer's Choice @ Moosecon 2013Customer's Choice @ Moosecon 2013
Customer's Choice @ Moosecon 2013Hasan Hosgel
 
Customer&rsquo;s Choice @ GDG Android Berlin on January meetup
Customer&rsquo;s Choice @ GDG Android Berlin on January meetupCustomer&rsquo;s Choice @ GDG Android Berlin on January meetup
Customer&rsquo;s Choice @ GDG Android Berlin on January meetupHasan Hosgel
 
Continuously Break The Android
Continuously Break The AndroidContinuously Break The Android
Continuously Break The AndroidHasan Hosgel
 
Coexisting of Android & Robots
Coexisting of Android & RobotsCoexisting of Android & Robots
Coexisting of Android & RobotsHasan Hosgel
 

Mehr von Hasan Hosgel (7)

Android Developer Days 2014 How second screen can enhance your app
Android Developer Days 2014 How second screen can enhance your appAndroid Developer Days 2014 How second screen can enhance your app
Android Developer Days 2014 How second screen can enhance your app
 
MTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesMTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi Devices
 
Android bootcamp 2013 Lists & Adapter
Android bootcamp 2013 Lists & AdapterAndroid bootcamp 2013 Lists & Adapter
Android bootcamp 2013 Lists & Adapter
 
Customer's Choice @ Moosecon 2013
Customer's Choice @ Moosecon 2013Customer's Choice @ Moosecon 2013
Customer's Choice @ Moosecon 2013
 
Customer&rsquo;s Choice @ GDG Android Berlin on January meetup
Customer&rsquo;s Choice @ GDG Android Berlin on January meetupCustomer&rsquo;s Choice @ GDG Android Berlin on January meetup
Customer&rsquo;s Choice @ GDG Android Berlin on January meetup
 
Continuously Break The Android
Continuously Break The AndroidContinuously Break The Android
Continuously Break The Android
 
Coexisting of Android & Robots
Coexisting of Android & RobotsCoexisting of Android & Robots
Coexisting of Android & Robots
 

Kürzlich hochgeladen

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 

Kürzlich hochgeladen (20)

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Droidcon nl 2013 best practices to develop for different android device classifications

  • 1. www.immobilienscout24.de Best Practices to develop for different Android Device Classifications Droidcon | Amsterdam | 26.11.2013 | Hasan Hosgel
  • 2. About me +Hasan Hosgel Twitter: @alosdev Github: alosdev Slideshare: hosgel CO-Organizer @ GDG Android in Berlin & community events developer @ ImmobilienScout24 Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 3. About ImmobilienScout24 Germany’s largest real estate listing company. > 10 Mio. Monthly unique users > 1.5 Mio. real estates > 300 Mio. detail views > 1500 Servers ~ 6.5 Mio. App downloads ~ 3 Mio. Android ~ 50% mobile traffic Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 4. Fragmentation Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 5. Fragmentation > 4400 Android Devices Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 6. Here comes The Nightmare Image source: Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/boogeyman13/4553188509/
  • 7. Here comes The Nightmare For developers Image source: Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/boogeyman13/4553188509/
  • 8. Let’s build the fundament Image source: Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/hertenberger/1434191066/
  • 9. Device Classification Images sources: https://play.google.com/store/devices Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 10. Device Classification Images sources: https://play.google.com/store/devices http://www.htc.com/de/ Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 11. Device Classification Images sources: http://www.sony.de/hub/google-tv Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 12. Device Classification Images Sources https://developer.ford.com/ Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 13. Wearables Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 14. Glass Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 15. Hard Work Ahead Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel Source: http://www.flickr.com/photos/16210667@N02/9172895225
  • 16. Resource Folders You can use several qualifiers in the resource folders name for serving the best matching resource. Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 17. Qualifiers ● Language (-en) ● Language & Region (-en-rUS) ● Smallest Width (–sw600dp) ● Screensize (-small, -normal, -large) ● Screen Orientation (-port, -land) ● Screen Pixel Densitiy (-hdpi, -xhdpi, -xxhdpi) ● Platform Version (-v11, -v13) Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 18. Best Matching Resources Win 1.res/values/strings.xml 2.res/values-en-rUS/strings.xml 3.res/values-large/strings.xml 4.res/values-sw600dp/strings.xml Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 19. Best Matching Resources Win 1.res/values/strings.xml 2.res/values-en-rUS/strings.xml 3.res/values-large/strings.xml 4.res/values-sw600dp/strings.xml The order of the qualifiers in the previous slides gives the ranking, if two resources have the same matching number of qualifiers. Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 20. Images Resources • Use the different qualifiers for the screen pixel density (mdpi, hdpi, etc.) • If you are forced to use text on images use language and region (en, es-rUS, en-rUS, etc.) • Better approach is to use 9-patch drawables, which stretches automatically depending on the content inside. • You must provide different launcher icons for Froyo, Honeycomb and above? Use the platform version. (v4, v11, v14) Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 21. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 22. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/ Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 23. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/  small phones Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 24. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/  small phones layout-sw320dp/  other phones Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 25. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/  small phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 26. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/  small phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” * You should also use the orientation qualifier Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 27. Platform version at lower v11 project-folder/res/ layout/  phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 28. Platform version at lower v11 project-folder/res/ layout/  phones layout-v11/  tablets 10” layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 29. Platform version at lower v11 project-folder/res/ layout/  phones layout-v11/  tablets 10” layout-v13/  small phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 30. Hint The smallest width qualifier gets automatically platform version ”-v13” through the packager, for avoiding problems with the number of matching qualifiers. Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 31. Howto Classify In Code • Read configuration from the device Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 32. Howto Classify In Code • Read configuration from the device • Smarter approach is to use boolean resources Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 33. project-folder/res/values/layouts.xml <resources> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 34. project-folder/res/values/layouts.xml <resources> <bool > </bool> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 37. project-folder/res/values/layouts.xml <resources> <bool name="is_phone_small">true</bool> <bool name="is_phone_other">false</bool> <bool name="is_tablet_7">false</bool> <bool name="is_tablet_10">false</bool> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 38. project-folder/res/values/layouts.xml <resources> <bool name="is_phone_small">true</bool> <bool name="is_phone_other">false</bool> <bool name="is_tablet_7">false</bool> <bool name="is_tablet_10">false</bool> </resources> Usage in code: getResources().getBoolean(R.bool.is_phone_small) Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 39. Current Layout File Structure project-folder/res/ layout/main.xml layout-v11/main.xml layout-v13/main.xml layout-sw320dp/main.xml layout-sw600dp/main.xml layout-sw720dp/main.xml Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 40. Current Layout File Structure project-folder/res/ layout/main.xml layout-v11/main.xml layout-v13/main.xml layout-sw320dp/main.xml layout-sw600dp/main.xml layout-sw720dp/main.xml Fixing one bug in the 10“ layout has to be done in two files. Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 41. Current Layout File Structure project-folder/res/ layout/main.xml layout-v11/main.xml layout-v13/main.xml layout-sw320dp/main.xml layout-sw600dp/main.xml layout-sw720dp/main.xml Fixing one bug in the 10“ layout has to be done in two files.  error prone Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 42. Resource Alias Put your layout files in the default folder. project-folder/res/ layout/main_phone_small.xml layout/main_phone_other.xml layout/main_tablet_7.xml layout/main_tablet_10.xml Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 43. Resource Alias 2. Create an item with the needed classification in the previously defined values folder. project-folder/res/valuessw720dp/layouts.xml <resources> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 44. Resource Alias 2. Create an item with the needed classification in the previously defined values folder. project-folder/res/valuessw720dp/layouts.xml <resources> <item > </item> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 45. Resource Alias 2. Create an item with the needed classification in the previously defined values folder. project-folder/res/valuessw720dp/layouts.xml <resources> <item name="main" > </item> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 46. Resource Alias 2. Create an item with the needed classification in the previously defined values folder. project-folder/res/valuessw720dp/layouts.xml <resources> <item name="main" type="layout"> </item> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 47. Resource Alias 2. Create an item with the needed classification in the previously defined values folder. project-folder/res/valuessw720dp/layouts.xml <resources> <item name="main" type="layout"> @layout/main_tablet_10.xml</item> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 48. Sample Screen Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 49. Sample Screen Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 50. Sample Screen Use <includes> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 51. Usage Includes <LinearLayout … > … … </LinearLayout> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 52. Usage Includes <LinearLayout … > … <include … </LinearLayout> /> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 53. Usage Includes <LinearLayout … > … <include layout="@layout/footer"/> … </LinearLayout> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 54. Sample Screen Use <includes> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 55. Sample Screen Use <includes> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 56. Sample Screen Create custom view Use <includes> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 57. Custom View public class CustomView extends LinearLayout { … public CustomView(Context context, AttributeSet attrs) { … addView(createTextView(context, "label"), lp); addView(createTextView(context, "desc"), lp); if(getResources().getBoolean(R.bool.is_phone)){ setOrientation(VERTICAL); } else { setOrientation(HORIZONTAL); } } … } Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 58. Usage CustomView in layout file <LinearLayout … > … … </LinearLayout> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 59. Usage CustomView in layout file <LinearLayout … > … <de.alosdev.CustomView android:layout_width="wrap_content" android:layout_height="wrap_content"/> … </LinearLayout> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 60. Sample Screen Create custom view Use <includes> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 61. Custom XML Attribute <resources> <declare-styleable > </declare-styleable> <resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 62. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> </declare-styleable> <resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 63. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr </declare-styleable> <resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel />
  • 64. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr name="label" </declare-styleable> <resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel />
  • 65. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr name="label" format="reference|string"/> </declare-styleable> <resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 66. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr name="label" format="reference|string"/> <attr name="value" format="reference|string"/> <attr name="orientation" format="enum"> <enum name="horizontal" value="0"/> <enum name="vertical" value="1"/> </attr> </declare-styleable> <resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 67. Usage in layout resource 1. Add to root XML node xmlns:app="http://schemas.android.com/apk/resauto" 2. Usage in custom view <de.alosdev.CustomView android:id="@+id/customView" android:layout_width="wrap_content" android:layout_height="wrap_content" app:label="label 1" app:orientation="vertical" app:value="value 1" /> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 68. Usage in code public class CustomView extends LinearLayout { static final int[] ORIENTATION = new int[] { HORIZONTAL, VERTICAL }; public CustomView(Context context, AttributeSet attrs) { super(context, attrs); … TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomView); try { setOrientation(ORIENTATION[ a.getInt(R.styleable.CustomView_orientation, 0)]); } finally { a.recycle(); } } … } Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 69. Custom XML Attribute Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 70. Custom XML Attribute If custom view has much more business logic and need lifecycles  Create a Fragment Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 71. Code Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 72. Best Practices ● You have already an application Remove orientation fixation and suppressing of orientation change from manifest to avoid long bug analyzing. ● You start from the scratch Focus on main classification for faster time to market But create an overall concept for better modularization Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 73. Best Practices ● If you support both orientations, save the instance state while orientation changes for more responsiveness Especially for states, that need a long computation for creation. Make the state object Parcelable for faster write & read and also to have a smaller memory footprint Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 74. Developer Hints ● You can start an activity for result from a fragment, so the response can be handled in the fragment. ● If you want to register a special service on every onCreate method of an activity give the ActivityLivecycleCallbacks a try. You can register them in the onCreate method of the application. (minSDK -v14) Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 75. ● If you get a BadParcelableException with the cause ClassNotFound-Exception, the source can be a NullPointerException during the read or write of the Parcelable. Exceptions are hidden during the parcel process. Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 76. If you want to use “match_parent” or “wrap_content” in a dimension alias, you should use “-1dp” or “-2dp” project-folder/res/values/dimen.xml <resources> <dimen name="my_dimen>@dimen/match_parent</dimen> <dimen name="match_parent">-1dp</dimen> <dimen name="wrap_content">-2dp</dimen> </resources> project-folder/res/values-sw600dp/layout.xml <resources> <dimen name="my_dimen>300dp</dimen> </resources> Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 77. Listener Hell If you have to many listeners or you think the programming model is old school like the “goto statements”. Give message/ event/ service bus a try. For Android: Otto from Square EventBus from greenrobot See also: Callbacks as our Generations' Go To Statement Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel
  • 78. Custom Theme & Style Android Ui Utils
  • 81.
  • 82. Mission Accomplished ? Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/ianaberle/5729561934/
  • 83. Mission Accomplished Droidcon NL 2013 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/ianaberle/5729561934/
  • 85. www.immobilienscout24.de Thanks for your attention! Contact: +HasanHosgel Twitter: @alosdev Github: alosdev Best Practices to develop for different Android Device Classifications https://github.com/alosdev/multidevice-nightmare-demo http://www.slideshare.net/hosgel/droidcon-nl-2013-best-practices-to-develop-fordifferent-android-device-classifications