Top Banner
84

Building your first android app using Xamarin

Jul 28, 2015

Download

Software

Gill Cleeren
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Building your first android app using Xamarin
Page 2: Building your first android app using Xamarin

Building your first Android app using XamarinGill Cleeren - @gillcleeren

Page 3: Building your first android app using Xamarin

Hi, I’m Gill!

Gill CleerenMVP and Regional Director.NET Practice Manager @ OrdinaTrainer & speaker

@gillcleeren

[email protected]

Page 4: Building your first android app using Xamarin

I’m a Pluralsight author!

• Courses on Windows 8, social and HTML5• http://gicl.me/mypscourses

Page 5: Building your first android app using Xamarin

Agenda

• Overview of Xamarin and Xamarin.Android• Xamarin.Android fundamentals• Creating a detail screen

• Lists and navigation• Navigating from master to detail

• (Optional) Intro to using Fragments• Optimizing the application• Preparing for store deployment

Page 6: Building your first android app using Xamarin

Targets of this talk

• Understanding the fundamentals of Android app development with Xamarin• See how a fully working app can be built

Page 7: Building your first android app using Xamarin

The demo scenario

• Android Coffee Store Manager• List of coffee• Navigation to details page

Page 8: Building your first android app using Xamarin

DEMOLooking at the finished application

Page 9: Building your first android app using Xamarin

Overview of Xamarin and Xamarin.Android

Page 10: Building your first android app using Xamarin

Hello Xamarin

• Xamarin enables developers to reach all major mobile platforms!• Native User Interface• Native Performance• Shared Code Across Platforms• C# & .NET Framework

• Toolset on top of Visual Studio• Enables VS to create native iOS and Android apps

• Commercial product

Page 11: Building your first android app using Xamarin

Write Everything in C#

iOS, Android, Windows, Windows Phone, Mac

Billions of Devices covered!

Page 12: Building your first android app using Xamarin

The Xamarin platform

Xamarin

Xamarin.Android Xamarin.iOS Xamarin Forms

Page 13: Building your first android app using Xamarin

Xamarin.Android exposes many extra device types

Page 14: Building your first android app using Xamarin

Xamarin.Android

Anything you can do in Java/Android can be done in C# and Visual Studio (or Xamarin Studio) with Xamarin!

Page 15: Building your first android app using Xamarin

How Xamarin works on Android

• Mono VM + Java VM execute side-by-side (supports both Dalvik and ART)• Mono VM JITs IL into native code and executes most of your code• Can utilize native libraries directly as well as .NET BCL

Page 16: Building your first android app using Xamarin

A word on code-sharing

• Xamarin brings development time through the use of code-sharing• Possible (currently!) using• Shared projects:

• allows organizing the shared code• #if directives for platform specific code

• PCL• “include” the platforms we want to support• Abstract to interfaces where platforms have specific implementations

Page 17: Building your first android app using Xamarin

Target architecture for a Xamarin app

Page 18: Building your first android app using Xamarin

Preparing for Android development

Page 19: Building your first android app using Xamarin

What you need for Xamarin.Android development• Xamarin license (Xamarin.Android)• PC or Mac• Visual Studio or Xamarin Studio• Android SDK and Emulators (installed via Xamarin setup)• Emulator• Device (not really required but...)

Page 20: Building your first android app using Xamarin

Installing Xamarin.Android

Page 21: Building your first android app using Xamarin

A word on emulators

• Setup will install some basic emulators for you• They’re great… for drinking a lot of coffee

Page 22: Building your first android app using Xamarin

Alternatives for the default emulators• Possible options• Genymotion

-Requires VirtualBox under the hood

• HAXM drivers• Android Player from Xamarin• Microsoft Android emulator

• Hyper-V

Page 23: Building your first android app using Xamarin

Developing with a device

• 3 steps• Enable Debugging on the Device • Install USB Drivers (Windows only)• Connect the Device to the Computer

Page 24: Building your first android app using Xamarin

Enable device debugging

• Tap the Build number 7 times to reveal developer options

Page 25: Building your first android app using Xamarin

Xamarin setup

DEMOA quick look at the development setup

Page 26: Building your first android app using Xamarin

Xamarin.Android fundamentals

Page 27: Building your first android app using Xamarin

File New Project

Page 28: Building your first android app using Xamarin

File New Project

Page 29: Building your first android app using Xamarin

Fundamental #1: Activities

• Apps are collections of activities• A view == an activity (for now )

• Apps don’t have an “entry point”• No single code line which is called by the OS• Apps start when Android creates one of the classes of the app

• App then gets loaded into memory

Page 30: Building your first android app using Xamarin

Fundamental #1: Activities

• When opening an application, the OS creates the first Activity• Activity is a specific class• Defines UI and behaviour for a single task• Corresponds to a single app screen• App gets loaded in memory

OS

User launches app

ActivityAndroid loads appIn memory

Page 31: Building your first android app using Xamarin

Fundamental #1: Activities

• One activity needs to be the “entry point” for the app: MainLauncher=True

Page 32: Building your first android app using Xamarin

Activity lifecycle

Page 33: Building your first android app using Xamarin

Activity lifecycle

• We can of course override these methods• OnCreate:

• Create views, initialize variables, and do other prep work before the user sees the Activity

• This method is called only once when the Activity is loaded into memory• OnResume

• Perform any tasks that need to happen every time the Activity returns to the device screen

• OnPause• Perform any tasks that need to happen every time the Activity leaves the device screen

Page 34: Building your first android app using Xamarin

Activity lifecycle in effect

Page 35: Building your first android app using Xamarin

Fundamental #2: Views

• The layout of the app is contained in *.axml files• AXML: Android designer file / Android XML

• First view of the app is named Main.axml • Can be any name really

• AXML files live in the Resources/layout folder

Page 36: Building your first android app using Xamarin

The designer for Xamarin.Android views

Page 37: Building your first android app using Xamarin

The designer for Xamarin.Android views

Page 38: Building your first android app using Xamarin

View code

Page 39: Building your first android app using Xamarin

Connecting and accessing controls from code• Linking a view with an activity is done using SetContentView

Page 40: Building your first android app using Xamarin

Connecting and accessing controls from code• We can name controls using the ID property• The Android designer maps the control to the Resource class and assigns it a

resource ID• The code representation of a control is

linked to the visual representation of the control in the designer via the Id property

Page 41: Building your first android app using Xamarin

Connecting and accessing controls from code• Once we have created the controls, we can access them from code• Field name is used for lookup

Page 42: Building your first android app using Xamarin

Fundamental #3: Application manifest• An Android app contains a manifest file• Contains a list of all resources, properties… that make up the application

• Also contains name, list of permissions… that the application has received

Images

Icons

*.axml

Others

Android Manifest file

Page 43: Building your first android app using Xamarin
Page 44: Building your first android app using Xamarin

DEMOCreating our first Android application together!

Page 45: Building your first android app using Xamarin

Navigation and lists

Page 46: Building your first android app using Xamarin

Fundamental #4: ListViews and adapters• Used very commonly in Android• Common way to present lists of rows• Each row is represented using a standard style or customized

• Consists out of• ListView: visual part• Adapter: feeds data to ListView

Page 47: Building your first android app using Xamarin

Fundamental #4: ListViews and adapters

Page 48: Building your first android app using Xamarin

Important classes

• ListView• ListActivity• BaseAdapter• ArrayAdapter & ArrayAdapter<T>

Page 49: Building your first android app using Xamarin

ListActivity and the built-in ArrayAdapter<T>

[Activity(Label = "Coffees", MainLauncher = true, Icon = "@drawable/icon")]public class CoffeeScreenActivity: ListActivity { string[] coffees;

protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); coffees= new string[] { "Coffee 1","Coffee 2", "Coffee 3"}; ListAdapter = new ArrayAdapter<String>(

this, Android.Resource.Layout.SimpleListItem1, coffees);

}}

Page 50: Building your first android app using Xamarin

Implementing your own adapter

• In most cases, the ArrayAdapter won’t be enough• We’ll need to create our own adapter

• Inherits from BaseAdapter

• Things we need to implement• Count:

• To tell the control how many rows are in the data• GetView:

• To return a View for each row, populated with data. This method has a parameter for the ListView to pass in an existing, unused row for re-use

• GetItemId: • Return a row identifier (typically the row number, although it can be any long value that

you like)• this[int] indexer:

• To return the data associated with a particular row number

Page 51: Building your first android app using Xamarin

Handling row clicks

• To handle row clicks, we need to implement OnListItemClick

protected override void OnListItemClick(ListView l, View v, int position, long id){ var t = items[position]; //do something}

Page 52: Building your first android app using Xamarin

DEMOAdding a ListView and an adapter

Page 53: Building your first android app using Xamarin

Customizing the ListView with other row views

Page 54: Building your first android app using Xamarin

Customizing the ListView with other row views

Page 55: Building your first android app using Xamarin

Customizing the ListView with other row views

Page 56: Building your first android app using Xamarin

DEMOUsing the built-in row views

Page 57: Building your first android app using Xamarin

Creating your own row views

• Custom row layouts are AXML files in Resources/layout• Are loaded by Id using a custom adapter• View can contain any number of display classes with custom colors, fonts…

Page 58: Building your first android app using Xamarin

Creating your ownrow view

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="8dp" android:orientation="horizontal"> <ImageView android:id="@+id/CoffeeImageView" android:layout_width="50dp" android:layout_height="50dp" android:padding="5dp" /> <LinearLayout android:id="@+id/TextFields" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="10dip"> <TextView android:id="@+id/CoffeeNameText" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/PriceText" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></LinearLayout>

Page 59: Building your first android app using Xamarin

Using your custom row viewpublic override View GetView(int position, View convertView, ViewGroup parent){    //custom view  var item = items[position];  if (convertView == null)  {      convertView = context.LayoutInflater.Inflate (Resource.Layout.CoffeeRowView, null);    }             convertView.FindViewById<ImageView>  (Resource.Id.CoffeeImageView).SetImageResource( imageRepository.ImageNameToResourceInt(item.ImageId.ToString())); convertView.FindViewById<TextView>  (Resource.Id.CoffeeNameText).Text = item.CoffeeName;    convertView.FindViewById<TextView>  (Resource.Id.PriceText).Text = item.Price.ToString();

    return convertView;}

Page 60: Building your first android app using Xamarin

DEMOAdding our own custom row view

Page 61: Building your first android app using Xamarin

Fundamental #5: Intents

• An Intent is an abstract concept for some sort of operation that should be performed in Android• Navigating to another activity• Often, launching an external application (= built-in) with the intent of doing

something• Make a phone call• Launch a URI• Map an address

• An intent often consist out of• What the intent is• The data needed for the intent

• Phone number to call

Page 62: Building your first android app using Xamarin

Intent of making a phone call

• ActionCall asks Android for an Activity to make a phone call

Page 63: Building your first android app using Xamarin

Intent of navigating to another screen• StartActivity can be used to start another activity• PutExtra() is used to pass data from one activity to the other

var intent = new Intent ();intent.SetClass (this, typeof(CoffeeDetailActivity));intent.PutExtra ("selectedCoffeeId", t.CoffeeId);StartActivity (intent);

Page 64: Building your first android app using Xamarin

Receiving information from the intentprotected override void OnCreate (Bundle bundle){    base.OnCreate (bundle);

    SetContentView (Resource.Layout.Main);

    var selectedCoffeeId = Intent.Extras.GetInt ("selectedCoffeeId", 0);

    Coffee coffee = DataService.GetCoffeeById (selectedCoffeeId);}

Page 65: Building your first android app using Xamarin

DEMONavigating from the List

to the Detail page

Page 66: Building your first android app using Xamarin

Adding Fragments

Page 67: Building your first android app using Xamarin

The need for Fragments

• Larger screen: more complex to build UIs that look good on all screens

• Layouts which look good on a small screen may not look good on a large tablet screen• Android V3.0 introduced Fragments

• Fragment is a UI module• UI gets divided into reusable parts• Each “part” is an separate activity• At run time, the Activities themselves will decide which Fragments to use

• Also work in older versions through Support packages

Page 68: Building your first android app using Xamarin

The need for Fragments

Page 69: Building your first android app using Xamarin

FragmentManager

• To help an Activity coordinate and manage all these Fragments, Android introduced a new class called the FragmentManager• Each activity has an instance of the FragmentManager• Allows finding, adding and removing fragments

Page 70: Building your first android app using Xamarin

Adding a fragment to an Activity

• We can add the Fragment to the Activity in 2 ways• Declaratively:

• Fragments can be used declaratively within .axml layout files by using the <Fragment> tag

• Programmatically• Fragments can also be instantiated dynamically by using the FragmentManager class’s

API

Page 71: Building your first android app using Xamarin

DEMORefactoring to Fragments

Page 72: Building your first android app using Xamarin

Optimizing the application

Page 73: Building your first android app using Xamarin

Managing strings in strings.xml

• We can have Android store string values for us

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, Click Me!</string>    <string name="app_name">AndroidCoffeeStore</string>    <string name="coffeeNameLabel">Coffee name</string></resources>

<TextView    android:text="@string/coffeeNameLabel"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/CoffeeNameLabel" />

Page 74: Building your first android app using Xamarin

Making the app multi-language

Page 75: Building your first android app using Xamarin

Application drawables

• We can add drawables: application icons• Adding all resolutions makes sure the icons look good on all screens• Filenames are the same• Folder name identifies the resolution

Page 76: Building your first android app using Xamarin

Application drawables

• We can select an image in the project properties• This now becomes the icon for the application within Android

Page 77: Building your first android app using Xamarin

DEMOAdding resources

and drawables to the application

Page 78: Building your first android app using Xamarin

Deploying to the store

Page 79: Building your first android app using Xamarin

Publishing your work

• Marketplace is most common option• Often, more than one is used (Google Play, Amazon, GetJar…)

• Email or website is often for a more closed distribution• Also require less work to prepare the application for distribution

• Google Play is best known store• Allows users to discover, download, rate, and pay for applications by clicking a

single icon either on their device or on their computer• Google Play also provides tools to assist in the analysis of sales and market

trends and to control which devices and users may download an application

Page 80: Building your first android app using Xamarin

Summary

• Xamarin.Android leverages your C# knowledge to build apps for Android• Concepts of Android mean a learning curve

Page 81: Building your first android app using Xamarin

Thanks!

Page 82: Building your first android app using Xamarin

Q&A

Page 83: Building your first android app using Xamarin

Building your first Android app using XamarinGill Cleeren - @gillcleeren

Page 84: Building your first android app using Xamarin

Your feedback is important!Scan the QR Code and let us know via the TechDays App.

Laat ons weten wat u van de sessie vindt via de TechDays App!Scan de QR Code.

Bent u al lid van de Microsoft Virtual Academy?! Op MVA kunt u altijd iets nieuws leren over de laatste technologie van Microsoft. Meld u vandaag aan op de MVA Stand. MVA biedt 7/24 gratis online training on-demand voor IT-Professionals en Ontwikkelaars.