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.
13. Open Automotive Alliance
Starting 2014 several companies plan to
bring Android platform to the cars.
• Audi
• GM
• Google
• Honda
• Hyundai
• Nvidia
http://www.openautoalliance.net/
21. Best Matching Resource Wins
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.
22. Image 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)
26. Classifications for Layouts
Platform version at least v13 (Honeycomb
MR2)
project-folder/res/
layout/ small phones
layout-sw320dp/ other phones
27. Classifications for Layouts
Platform version at least v13 (Honeycomb
MR2)
project-folder/res/
layout/ small phones
layout-sw320dp/ other phones
layout-sw600dp/ tablets 7”
28. 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
29. Platform version lower v11
project-folder/res/
layout/
layout-sw320dp/ other phones
layout-sw600dp/ tablets 7”
layout-sw720dp/ tablets 10”
32. Platform version 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”
33. Hint
The smallest width qualifier gets
automatically platform version ”-v13”
through the packager, for avoiding
problems with the number of matching
qualifiers.
34. How to Classify In Code
• Read configuration from the device
35. How to Classify In Code
• Read configuration from the device
• Smarter approach is to use boolean
resources
43. 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.
44. 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
45. 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
46. Create an item with the needed
classification in the previously defined
values folder.
project-folder/res/values-sw720dp/layouts.xml
<resources>
</resources>
47. Create an item with the needed
classification in the previously defined
values folder.
project-folder/res/values-sw720dp/layouts.xml
<resources>
<item name="main" >
</item>
</resources>
48. Create an item with the needed
classification in the previously defined
values folder.
project-folder/res/values-sw720dp/layouts.xml
<resources>
<item name="main" type="layout">
</item>
</resources>
49. Create an item with the needed
classification in the previously defined
values folder.
project-folder/res/values-sw720dp/layouts.xml
<resources>
<item name="main" type="layout">
@layout/main_tablet_10.xml
</item>
</resources>
75. 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
76. 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
77. 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)
78. 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.
79. If you want to use “match_parent” or “wrap_content”
in a dimension alias, you should use “-1px” or “-2px”
project-folder/res/values/dimen.xml
<resources>
<dimen name="my_dimen>@dimen/match_parent</dimen>
<dimen name="match_parent">-1px</dimen>
<dimen name="wrap_content">-2px</dimen>
</resources>
project-folder/res/values-sw600dp/layout.xml
<resources>
<dimen name="my_dimen>300dp</dimen>
</resources>
80. 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
87. Q & A
Image source:
http://www.flickr.com/photos/21496790@N06/5065834411/
88. www.immobilienscout24.dewww.immobilienscout24.de
Thanks for your attention!
Contact:
+HasanHosgel
@alosdev
alosdev
Best Practices to develop for different Android Device Classifications
https://github.com/alosdev/multidevice-nightmare-demo
http://www.slideshare.net/hosgel/mtc-spring-2014-best-practices-to-develop-for-different-
android-device-classifications