pretty 'awesome' apps (demo at mobilise meetup)

31
Multi Platform App Dev David Douglas @deadlyfingers

Upload: david-douglas

Post on 15-May-2015

216 views

Category:

Presentations & Public Speaking


0 download

DESCRIPTION

For solo platform developers interested in multi platform development… Three multi-platform demos: – Reuse data source (local JSON) – Data modeling (Obj C, Java, C#) – UI components that play nice with orientation change & mobile/tablet/desktop. Awesome custom font! Purpose: – Think multi-platform, not just one! (Discoverability, Multi-channel, Multi-device users) – Highlight the UI components that react responsively. (Responsive/Adaptive design) – Bespoke design – increase uniqueness by adding custom fonts to your app! (like CSS3 @font-face did for websites)

TRANSCRIPT

Page 1: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Multi Platform App Dev

David Douglas@deadlyfingers

Page 2: Pretty 'Awesome' apps (demo at Mobilise Meetup)

3x IDEs• Xcode 5 • Android Studio • Visual Studio 2013

Page 3: Pretty 'Awesome' apps (demo at Mobilise Meetup)

3x Languages• Objective C / Swift• Java• C#

Page 4: Pretty 'Awesome' apps (demo at Mobilise Meetup)

3x UX Design Guidelines• iOS 7+ (Flat design)• Android L (Material Design)• Windows 8 (Flat design)

Page 5: Pretty 'Awesome' apps (demo at Mobilise Meetup)

3x Platform Design Patterns• iOS• Android• Windows

Page 6: Pretty 'Awesome' apps (demo at Mobilise Meetup)

iOS MVC Design Pattern• Model

– Model.h (+.m)• View

– ViewController.xib• Controller

– ViewController.h (+.m)

Page 7: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Android MV? Design Pattern• Model

– Model.java• View

– activity_my.xml• Controller / Adapter

– MyActivity.java – Adapter.java

Page 8: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Windows MVVM Design Pattern• Model

– Model.cs• View

– MainPage.xaml– MainPage.cs

• ViewModel– ViewModel.cs

Page 9: Pretty 'Awesome' apps (demo at Mobilise Meetup)

3x “Awesome” Apps Demos• Reuse data source (local JSON)• Data modeling (Obj C, Java, C#)• UI components that play nice with orientation change & mobile/tablet/desktop.• Custom font

Page 10: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Data Source• Font Awesome Glyphs• JSON file generated with Ruby script

(watir)

Page 11: Pretty 'Awesome' apps (demo at Mobilise Meetup)

iOS App (demo)• iPhone• iPad

Page 12: Pretty 'Awesome' apps (demo at Mobilise Meetup)

iOS App• CocoaPods• JSONModel• Custom Font (Info.plist)• Collection View• Storyboard (shared)

Page 13: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Android App (demo)• Phone• Tablet

Page 14: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Android App• Android Studio and Gradle• GSON from JSON file in

‘src/main/assets’• Generate Getters & Setters [Cmd]+[N]• GridView• Custom ArrayAdapter

Page 15: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Windows App (demo)• Phone• Tablet / Surface• Desktop PC

Visual Studio 2013

Page 16: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Windows App• Universal Apps - Shared Assets

(W8+WP8)• NuGet Package Manager • Newtonsoft.JSON• GridView • {Binding}

Page 17: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Summary of similaritiesFeatures iOS Android WindowsLib Management

CocoaPods Gradle NuGet

JSON JSONModel GSON Newtonsoft.JSON

Grid Layout UICollectionView

GridView GridView

Grid Objects UICollectionViewDataSource

ArrayAdapter {Binding}

App start ViewController.m

MainActivity.java

MainPage.xaml∟

MainPage.xaml.cs

Page 18: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Taking it further…• Theming• Navigation to Detail View• Azure Mobile Services - Add user identity - eg. My favorites - Push future updates over Cloud!

Page 19: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Theming

Page 20: Pretty 'Awesome' apps (demo at Mobilise Meetup)

iOS Status Bar appearance

Info.plist

App Delegate[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

View Controller- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent;}

Page 21: Pretty 'Awesome' apps (demo at Mobilise Meetup)

View Controller[[self.navigationController navigationBar] setBarTintColor:[UIColor blackColor]];

[[self.navigationController navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];

[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

iOS Navigtaion Bar appearance

Page 22: Pretty 'Awesome' apps (demo at Mobilise Meetup)

res/values-v21/styles.xml<?xml version="1.0" encoding="utf-8"?><resources> <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar"> <item name="android:colorPrimary">#B3C938</item> <item name="android:colorPrimaryDark">#000000</item> </style></resources>

Android L (API 21) Theme

Page 23: Pretty 'Awesome' apps (demo at Mobilise Meetup)

res/drawable/actionbar_background.xml<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle”><solid android:color="#B3C938" /></shape>

res/values/styles.xml<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/MyActionBar</item> <item name="android:actionMenuTextColor">#ffffff</item> <!-- Support library compatibility --> <item name="actionBarStyle">@style/MyActionBar</item> <item name="actionMenuTextColor">#ffffff</item> </style>

<!-- ActionBar styles --> <style name="MyActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse"> <item name="android:background">@drawable/actionbar_background</item> <item name="android:titleTextStyle">@style/MyActionBarTitleText</item> <!-- Support library compatibility --> <item name="background">@drawable/actionbar_background</item> <item name="titleTextStyle">@style/MyActionBarTitleText</item> </style>

<!-- ActionBar title text --> <style name="MyActionBarTitleText" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">#ffffff</item> </style></resources>

Android AppCompat styles

Page 24: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Page.xaml<Page Background="Crimson" RequestedTheme="Light">

Page.xaml.csprivate async Task showStatusBar(){

StatusBar statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();

// Change the status bar colorawait statusBar.ShowAsync(); // Shows the status bar if it is hiddenstatusBar.ForegroundColor = ColorHelper.FromArgb(0, 255, 0, 0);statusBar.BackgroundColor = ColorHelper.FromArgb(0, 128, 0, 0);statusBar.BackgroundOpacity = 1;

}

WindowsPhone Status Bar

Page 25: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Custom Fonts

Page 26: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Info.plist

View ControllerUIFont *customFont = [UIFont fontWithName:@"FontAwesome" size:64];

UILabel *labelGlyph = (UILabel *) [self.view viewWithTag:1];[labelGlyph setFont:customFont];[labelGlyph setTextColor:[UIColor grayColor]];[labelGlyph setText:@"\uf164"];

iOS UIFont

Page 27: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Activity.javafinal TextView textView = (TextView) findViewById(R.id.textView);

Typeface customFont = Typeface.createFromAsset(context.getAssets(), "FontAwesome.otf");

textView.setText( Html.fromHtml("&#xf164;") );

textGlyph.setTypeface(customFont);

Android Typeface

Page 28: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Page.xaml<TextBlock Name="textBlock" FontSize="64" Foreground="Gray" Text="" FontFamily="ms-appx:///Assets/FontAwesome.otf#FontAwesome" />

Page.xaml.csFontFamily customFont = new FontFamily( "ms-appx:///Assets/FontAwesome.otf#FontAwesome");

textBlock.FontFamily = customFont;

textBlock.Text = "\uf164";

Windows FontFamily

Page 29: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Native DesignAppledeveloper.apple.com/design

Androidwww.google.co.uk/design

Windowshttp://design.windows.com

Page 30: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Native DevelopmentApplehttp://tinyurl.com/iosdesignpattterns

Androidhttp://tinyurl.com/android-mvvm

Windows

http://tinyurl.com/windows-mvvm

Page 31: Pretty 'Awesome' apps (demo at Mobilise Meetup)

Thank you

Questions? @deadlyfingers