Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
www.immobilienscout24.de

Best Practices to develop for
different Android Device Classifications

Droidcon | Turin| 07.02....
About me

+HasanHosgel
Twitter: @alosdev
Github:
alosdev
Slideshare: hosgel
CO-Organizer @ GDG
Android in Berlin
& communi...
About ImmobilienScout24

Germany’s largest real
estate listing company.
> 10 Mio. Monthly unique
users
> 1.5 Mio. real est...
Fragmentation

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Fragmentation

> 5000 Android Devices

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Here comes The Nightmare

Image source:
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
htt...
Here comes The Nightmare

For developers
Image source:
Droidcon IT 2014 | Develop for different device classifications | H...
Let’s build the fundament

Image source:
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
ht...
Device Classification

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

Droidcon IT 2014 | Develop for different dev...
Device Classification

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

Droidcon IT 2014 | De...
Device Classification

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

Droidcon IT 2014 | Develop for different device c...
Device Classification

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

Droidcon IT 2014 | Develop for different device classif...
Open Automotive Alliance

Starting 2014 several companies plan to bring
Android platform to the cars.
• Audi
• GM
• Google...
Wearables

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Glass

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Hard Work Ahead

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel

Source: http://www.flickr...
Resource Folders

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

Dro...
Qualifiers

● Language (-en)
● Language & Region (-en-rUS)
● Smallest Width (–sw600dp)
● Screensize (-small, -normal, -lar...
Best Matching Resources Win

1.res/values/strings.xml
2.res/values-en-rUS/strings.xml
3.res/values-large/strings.xml
4.res...
Best Matching Resources Win

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

• Use the different qualifiers for the screen pixel
density (mdpi, hdpi, etc.)
• If you are forced to us...
Classifications for Layouts

Platform version at least v13 (Honeycomb
MR2)

Droidcon IT 2014 | Develop for different devic...
Classifications for Layouts

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

layout/

Droidcon IT 2014 ...
Classifications for Layouts

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

layout/

 small phones

D...
Classifications for Layouts

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

layout/

 small phones

l...
Classifications for Layouts

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

layout/

 small phones

l...
Classifications for Layouts

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

layout/

 small phones

l...
Platform version at lower v11
project-folder/res/
layout/

 phones

layout-sw320dp/

 other phones

layout-sw600dp/

 t...
Platform version at lower v11
project-folder/res/
layout/

 phones

layout-v11/

 tablets 10”

layout-sw320dp/

 other ...
Platform version at lower v11
project-folder/res/
layout/

 phones

layout-v11/

 tablets 10”

layout-v13/

 small phon...
Hint

The smallest width qualifier gets automatically
platform version ”-v13” through the packager,
for avoiding problems ...
Howto Classify In Code

• Read configuration from the device

Droidcon IT 2014 | Develop for different device classificati...
Howto Classify In Code

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

Droidcon IT 2...
project-folder/res/values/layouts.xml
<resources>

</resources>

Droidcon IT 2014 | Develop for different device classific...
project-folder/res/values/layouts.xml
<resources>
<bool

>

</bool>

</resources>

Droidcon IT 2014 | Develop for differen...
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">

</bool>

</resources>

Droidcon IT 2014 | ...
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">true</bool>

</resources>

Droidcon IT 2014 ...
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">true</bool>
<bool name="is_phone_other">fals...
project-folder/res/values/layouts.xml
<resources>
<bool name="is_phone_small">true</bool>
<bool name="is_phone_other">fals...
Current Layout File Structure

project-folder/res/
layout/main.xml
layout-v11/main.xml
layout-v13/main.xml
layout-sw320dp/...
Current Layout File Structure

project-folder/res/
layout/main.xml
layout-v11/main.xml
layout-v13/main.xml
layout-sw320dp/...
Current Layout File Structure

project-folder/res/
layout/main.xml
layout-v11/main.xml
layout-v13/main.xml
layout-sw320dp/...
Resource Alias

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

layout/main_...
Resource Alias

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

project-folder/...
Resource Alias

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

project-folder/...
Resource Alias

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

project-folder/...
Resource Alias

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

project-folder/...
Resource Alias

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

project-folder/...
Sample Screen

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Use <includes>
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Usage Includes

<LinearLayout … >
…
…
</LinearLayout>

Droidcon IT 2014 | Develop for different device classifications | H...
Usage Includes

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

/>

Droidcon IT 2014 | Develop for different device classi...
Usage Includes

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

Droidcon IT 2014 | Develop for d...
Sample Screen

Use <includes>
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Use <includes>
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Sample Screen

Create custom view

Use <includes>
Droidcon IT 2014 | Develop for different device classifications | Hasan ...
Custom View

public class CustomView extends LinearLayout {
…
public CustomView(Context context, AttributeSet attrs)
{
…
a...
Usage CustomView in layout file

<LinearLayout … >
…

…
</LinearLayout>

Droidcon IT 2014 | Develop for different device c...
Usage CustomView in layout file

<LinearLayout … >
…
<de.alosdev.CustomView
android:layout_width="wrap_content"
android:la...
Sample Screen

Create custom view

Use <includes>
Droidcon IT 2014 | Develop for different device classifications | Hasan ...
Custom XML Attribute
<resources>
<declare-styleable

>

</declare-styleable>
<resources>

Droidcon IT 2014 | Develop for d...
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">

</declare-styleable>
<resources>

Droidcon IT 2014...
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">
<attr

</declare-styleable>
<resources>

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

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

</d...
Custom XML Attribute
<resources>
<declare-styleable name=”CustomView">
<attr name="label" format="reference|string"/>
<att...
Usage in layout resource

1. Add to root XML node
xmlns:app="http://schemas.android.com/apk/resauto"
2. Usage in custom vi...
Usage in code

public class CustomView extends LinearLayout {
static final int[] ORIENTATION = new int[] { HORIZONTAL, VER...
Custom XML Attribute

Droidcon IT 2014 | 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 IT 201...
Code

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Best Practices

● You have already an application
Remove orientation fixation and
suppressing of orientation change from
m...
Best Practices

● If you support both orientations, save the
instance state while orientation changes for
more responsiven...
Developer Hints

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

...
● If you get a BadParcelableException with
the cause ClassNotFound-Exception, the
source can be a NullPointerException
dur...
If you want to use “match_parent” or
“wrap_content” in a dimension alias, you should use
“-1dp” or “-2dp”
project-folder/r...
Listener Hell

If you have to many listeners or you think the
programming model is old school like the “goto
statements”. ...
Custom Theme & Style
Android Ui Utils

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
ActionBar Style Generator

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Holo Color Generator

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Mission Accomplished ?

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.c...
Mission Accomplished

Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
http://www.flickr.com...
Q&A

Page 85
Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
Source: http://www.flickr.com/...
www.immobilienscout24.de

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

Best Practic...
Nächste SlideShare
Wird geladen in …5
×

Droidcon it 2014 best practices to develop for different android device classifications

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.

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen
  • Als Erste(r) kommentieren

Droidcon it 2014 best practices to develop for different android device classifications

  1. 1. www.immobilienscout24.de Best Practices to develop for different Android Device Classifications Droidcon | Turin| 07.02.2014 | Hasan Hosgel
  2. 2. About me +HasanHosgel Twitter: @alosdev Github: alosdev Slideshare: hosgel CO-Organizer @ GDG Android in Berlin & community events developer @ ImmobilienScout24 Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  3. 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 ~ 7.5 Mio. App downloads > 3 Mio. Android > 50% mobile traffic Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  4. 4. Fragmentation Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  5. 5. Fragmentation > 5000 Android Devices Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  6. 6. Here comes The Nightmare Image source: Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/boogeyman13/4553188509/
  7. 7. Here comes The Nightmare For developers Image source: Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/boogeyman13/4553188509/
  8. 8. Let’s build the fundament Image source: Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/hertenberger/1434191066/
  9. 9. Device Classification Images sources: https://play.google.com/store/devices Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  10. 10. Device Classification Images sources: https://play.google.com/store/devices http://www.htc.com/de/ Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  11. 11. Device Classification Images sources: http://www.sony.de/hub/google-tv Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  12. 12. Device Classification Images Sources https://developer.ford.com/ Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  13. 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/ Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  14. 14. Wearables Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  15. 15. Glass Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  16. 16. Hard Work Ahead Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel Source: http://www.flickr.com/photos/16210667@N02/9172895225
  17. 17. Resource Folders You can use several qualifiers in the resource folders name for serving the best matching resource. Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  18. 18. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  19. 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 Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  20. 20. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  21. 21. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  22. 22. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  23. 23. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/ Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  24. 24. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/  small phones Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  25. 25. Classifications for Layouts Platform version at least v13 (Honeycomb MR2) project-folder/res/ layout/  small phones layout-sw320dp/  other phones Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  26. 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” Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  27. 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” layout-sw720dp/  tablets 10” * You should also use the orientation qualifier Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  28. 28. Platform version at lower v11 project-folder/res/ layout/  phones layout-sw320dp/  other phones layout-sw600dp/  tablets 7” layout-sw720dp/  tablets 10” Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  29. 29. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  30. 30. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  31. 31. Hint The smallest width qualifier gets automatically platform version ”-v13” through the packager, for avoiding problems with the number of matching qualifiers. Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  32. 32. Howto Classify In Code • Read configuration from the device Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  33. 33. Howto Classify In Code • Read configuration from the device • Smarter approach is to use boolean resources Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  34. 34. project-folder/res/values/layouts.xml <resources> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  35. 35. project-folder/res/values/layouts.xml <resources> <bool > </bool> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  36. 36. project-folder/res/values/layouts.xml <resources> <bool name="is_phone_small"> </bool> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  37. 37. project-folder/res/values/layouts.xml <resources> <bool name="is_phone_small">true</bool> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  38. 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> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  39. 39. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  40. 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 Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  41. 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. Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  42. 42. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  43. 43. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  44. 44. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  45. 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 > </item> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  46. 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" > </item> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  47. 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"> </item> </resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  48. 48. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  49. 49. Sample Screen Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  50. 50. Sample Screen Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  51. 51. Sample Screen Use <includes> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  52. 52. Usage Includes <LinearLayout … > … … </LinearLayout> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  53. 53. Usage Includes <LinearLayout … > … <include … </LinearLayout> /> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  54. 54. Usage Includes <LinearLayout … > … <include layout="@layout/footer"/> … </LinearLayout> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  55. 55. Sample Screen Use <includes> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  56. 56. Sample Screen Use <includes> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  57. 57. Sample Screen Create custom view Use <includes> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  58. 58. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  59. 59. Usage CustomView in layout file <LinearLayout … > … … </LinearLayout> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  60. 60. Usage CustomView in layout file <LinearLayout … > … <de.alosdev.CustomView android:layout_width="wrap_content" android:layout_height="wrap_content"/> … </LinearLayout> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  61. 61. Sample Screen Create custom view Use <includes> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  62. 62. Custom XML Attribute <resources> <declare-styleable > </declare-styleable> <resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  63. 63. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> </declare-styleable> <resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  64. 64. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr </declare-styleable> <resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel />
  65. 65. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr name="label" </declare-styleable> <resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel />
  66. 66. Custom XML Attribute <resources> <declare-styleable name=”CustomView"> <attr name="label" format="reference|string"/> </declare-styleable> <resources> Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  67. 67. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  68. 68. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  69. 69. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  70. 70. Custom XML Attribute Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  71. 71. Custom XML Attribute If custom view has much more business logic and need lifecycles  Create a Fragment Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  72. 72. Code Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  73. 73. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  74. 74. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  75. 75. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  76. 76. ● 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  77. 77. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  78. 78. 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 IT 2014 | Develop for different device classifications | Hasan Hosgel
  79. 79. Custom Theme & Style Android Ui Utils Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  80. 80. ActionBar Style Generator Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  81. 81. Holo Color Generator Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  82. 82. Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel
  83. 83. Mission Accomplished ? Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/ianaberle/5729561934/
  84. 84. Mission Accomplished Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel http://www.flickr.com/photos/ianaberle/5729561934/
  85. 85. Q&A Page 85 Droidcon IT 2014 | Develop for different device classifications | Hasan Hosgel Source: http://www.flickr.com/photos/21496790@N06/5065834411/
  86. 86. 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-it-2014-best-practices-to-develop-fordifferent-android-device-classifications

×