Here you can experience the learnings, which the presenter got during development of the ImmobilienScout24 Android application. The presentation doesn't cover Design, UX or Fragments, but it gives an introduction and samples of using different resources, in special layouts. These folders can be used for filtering specific configurations, referencing other resources and using layout aliases. This session aims at people with knowledge of coding for Android.
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
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/
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
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
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
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
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