Top Banner
Xamarin ハンズオ エクセルソフト株式会社 Business Development Manager 田淵 義人 [email protected] 03-5440-7875 / 080-7015-3586 1
59

Xamarin 基礎講座

Apr 11, 2017

Download

Mobile

Yoshito Tabuchi
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: Xamarin 基礎講座

Xamarin ハンズオン

エクセルソフト株式会社

Business Development Manager

田淵義人

[email protected]

03-5440-7875 / 080-7015-3586

1

Page 2: Xamarin 基礎講座

自己紹介 • 田淵義人• Xamarin コミュニティエバンジェリスト• Microsoft MVP Visual Studio and Development

Tools 受賞♪• 目指せ!開発もチョットデキル営業

• マイナビニュースで連載中

• Build Insider Xamarin TIPS で連載中

• 本書きました(Xamarin の章)

• Twitter: @ytabuchi

• facebook: ytabuchi.xlsoft

• Blog: http://ytabuchi.hatenablog.com/

Page 3: Xamarin 基礎講座

本日の流れ • Xamarin ネイティブ基礎講習 30分

• Xamarin ネイティブハンズオン 1時間半

• 休憩 15分

• Xamarin.Forms 基礎購入 30分

• Xamarin.Forms ハンズオン 1時間半

• キャッチアップ、クロージング

3

Page 4: Xamarin 基礎講座

モバイルアプリ開発に必要なモノ

4

Page 5: Xamarin 基礎講座

今までのアプリ開発

5

Page 6: Xamarin 基礎講座

クロスプラットフォーム開発環境

“No Silver Bullet”

6

Page 7: Xamarin 基礎講座

Xamarin(ザマリン)・ C# / .NET / Visual Studio・フル “ネイティブ” アプリ・ API 100% 移植・コード共通化

7

Page 8: Xamarin 基礎講座

Xamarin のしくみ2つの開発手法

8

Page 9: Xamarin 基礎講座

Xamarin ネイティブ

9

Page 10: Xamarin 基礎講座

Xamarin.Forms

UI “コード”の共通化

ビルド時にネイティブ UI にマップ

XAML

10

Page 11: Xamarin 基礎講座

豊富な開発者用リソース

• 公式ドキュメント

• ペゾルド本(PDFが無料配布中)

日本語の情報

• Japan Xamarin User Group Conference

• Build Insider

• Qiita

• 田淵のブログ

• 各種ブログへのリンク

11

Page 12: Xamarin 基礎講座

Xamarin ネイティブ

12

Page 13: Xamarin 基礎講座

C#

13

var employees = new List<Employee>();var seniors = from e in employees where e.Salary > 50000 select e;var client = new HttpClient();var result = await client.GetStringAsync("");

Page 14: Xamarin 基礎講座

C# 構文

14

EditText input = new EditText(this);String text = input.getText().toString();input.addTextChangedListener(new TextWatcher() { ... });

var input = new EditText(this);string text = input.Text;input.TextChanged += (sender, e) => { ... };

Page 15: Xamarin 基礎講座

Xamarin.Android

15

Page 16: Xamarin 基礎講座

構成

16

ソースファイル

(C#)

UI 定義

(axml)

メタデータ

(Resources)

Page 17: Xamarin 基礎講座

Activity

17

Activity 1

UI

Code

Activity 2

UI

Code

Activity 3

UI

Code

Data, files, images など

アプリ

Page 18: Xamarin 基礎講座

Layout

18

Page 19: Xamarin 基礎講座

Pi.axml PiActivity.cs

Activity + Layout

19

<LinearLayout ... ><TextView ... /><EditText ... /><Button ... /><TextView ... />

</LinearLayout>

[Activity]public class PiActivity : Activity{......

}

Page 20: Xamarin 基礎講座

Resource Id

20

[Activity(MainLauncher = true)]public class MainActivity : Activity{

protected override void OnCreate(Bundle bundle){

base.OnCreate(bundle);SetContentView(Resource.Layout.Main);

var et = FindViewById<EditText>(Resource.Id.digitsInput);...

}...

}

Page 21: Xamarin 基礎講座

Intent

21

Page 22: Xamarin 基礎講座

Intent

22

public class MainActivity : Activity{...void OnClick(object sender, EventArgs e){

var intent = new Intent(this, typeof(Activity2));

base.StartActivity(intent);}

}

Page 23: Xamarin 基礎講座

Navigation

23

Page 24: Xamarin 基礎講座

Extra

24

Page 25: Xamarin 基礎講座

Xamarin.iOS

25

Page 26: Xamarin 基礎講座

構成

26

ソースファイル

(C#)

UI 定義

(Storyboard + XiB)

メタデータ

(property lists)

Page 27: Xamarin 基礎講座

Frame

27

Page 28: Xamarin 基礎講座

Bounds

28

Page 29: Xamarin 基礎講座

View (コードで)

29

Page 30: Xamarin 基礎講座

Designer

30

Page 31: Xamarin 基礎講座

Constraints (制約)

31

Page 32: Xamarin 基礎講座

Multi Screen

32

Page 33: Xamarin 基礎講座

Segue

33

Page 34: Xamarin 基礎講座

Action Segue

34

Page 35: Xamarin 基礎講座

PerformSegue

35

Page 36: Xamarin 基礎講座

Xamarin.Forms

36

Page 37: Xamarin 基礎講座

構成要素・対応システム

37

Page 38: Xamarin 基礎講座

Pages

Content MasterDetail Navigation Tabbed Carousel

38

Page 39: Xamarin 基礎講座

Layouts

Stack Absolute Relative Grid ContentView ScrollView Frame

39

Page 40: Xamarin 基礎講座

Controls

ActivityIndicator BoxView Button DatePicker Editor

Entry Image Label ListView Map

OpenGLView Picker ProgressBar SearchBar Slider

Stepper TableView TimePicker WebView EntryCell

ImageCell SwitchCell TextCell ViewCell

40

Page 41: Xamarin 基礎講座

レンダリング / マッピング

41

Page 42: Xamarin 基礎講座

C#

42

Page 43: Xamarin 基礎講座

Microsoft XAML vs Xamarin.Forms XAML

43

Page 44: Xamarin 基礎講座

サポートされている XAML 機能

44

Page 45: Xamarin 基礎講座

45

Page 46: Xamarin 基礎講座

Attributes

46

Page 47: Xamarin 基礎講座

x:Name Event

47

Page 48: Xamarin 基礎講座

Event

48

Page 49: Xamarin 基礎講座

OnPlatform

49

Page 50: Xamarin 基礎講座

Data Binding (Mvvm)

50

ListPage.xaml<ListView ItemsSource="{Binding .}" HasUnevenRows="True">

<ListView.ItemTemplate><DataTemplate>

<ViewCell><Grid><Image Source="{Binding Photo}" /><Label Text="{Binding Person}"/><Label Text="{Binding Department}" /><Label Text="{Binding Age, StringFormat='{0}才'}" /><Label Text="{Binding Followers, StringFormat='Followers: {0}'}" />

</Grid></ViewCell>

</DataTemplate></ListView.ItemTemplate>

</ListView>

Page 51: Xamarin 基礎講座

Data Binding (Mvvm)

51

ListPageViewModel.csclass ListPageViewModel : INotifyPropertyChanged{

public event PropertyChangedEventHandler PropertyChanged;

private string _person;public string Person{

get { return _person; }set{

if (_person != value){

_person = value;OnPropertyChanged(nameof(Person));

}}

}}

Page 52: Xamarin 基礎講座

Dependency Service

52

IDialer.cs : PCLpublic interface IDialer{

bool Dial(string number);}

Usevar dialer = DependencyService.Get<IDialer>();dialer.Dial(translatedNumber);

Page 53: Xamarin 基礎講座

Dependency Service

53

PhoneDialer.cs / iOS[assembly: Dependency(typeof(PhoneDialer))]

public class PhoneDialer : IDialer{

public bool Dial(string number){

return UIApplication.SharedApplication.OpenUrl(new NSUrl("tel:" + number));

}}

Page 54: Xamarin 基礎講座

Custom Renderer

54

RoundedButton.cs (PCL)public class RoundedButton : Button{

public RoundedButton() { }}

Page 55: Xamarin 基礎講座

Custom Renderer

55

RoundedButton.cs (iOS)[assembly: ExportRenderer(typeof(RoundedButton), typeof(RoundedButtonRenderer))]

class RoundedButtonRenderer : ButtonRenderer{

protected override void OnElementChanged(ElementChangedEventArgs<Button> e){

base.OnElementChanged(e);if (Control != null){

var c = UIColor.FromRGB(0.867f, 1.0f, 0.867f); // #ddffddControl.Layer.CornerRadius = 25f;Control.Layer.BackgroundColor = c.CGColor;

}}

}

Page 56: Xamarin 基礎講座

Custom Renderer

56

RoundedButton.cs (Android)

if (Control != null){

Control.SetBackgroundResource(Resource.Drawable.RoundedButton);}

RoundedButton.xml (Android)<shape xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="rectangle"><solid android:color="#99cc99"/><corners android:radius="25dp"/>

</shape>

Page 57: Xamarin 基礎講座

Xamarin Pluginshttps://github.com/xamarin/plugins

57

Page 58: Xamarin 基礎講座

Xamarin.Forms 完成品

58

Page 59: Xamarin 基礎講座

ご清聴ありがとうございます。ハンズオン楽しんでください。

ご質問がありましたら、田淵までお気軽にどうぞ[email protected] / 03-5440-7875Twitter: @ytabuchifacebook: ytabuchi.xlsoftBlog: http://ytabuchi.hatenablog.com/

59