深入Xamarin.Forms

1220阅读 0评论2017-10-25 renxiao2003
分类:Android平台


Xamarin.Forms快速入门中,构建了Phoneword应用程序。 本文回顾了为了了解XAMarin.Forms应用程序的基础知识而建立的内容。

以下主题被提及:

Visual Studio简介

Visual Studio是微软强大的IDE。 它具有完全集成的视觉设计师,一个包含重构工具的文本编辑器,汇编浏览器,源代码集成等。 本文重点介绍使用Xamarin插件的一些基本的Visual Studio功能。

Visual Studio将代码整合到解决方案和项目中。 解决方案是一个容纳一个或多个项目的容器。 项目可以是应用程序,支持库,测试应用程序等。 Phoneword应用程序包含一个包含六个项目的解决方案,如以下屏幕截图所示。

项目有:

Xamarin.Forms应用的解剖学

以下截图显示Visual Studio中Phoneword PCL项目的内容:

该项目由两个文件夹组成:

该项目还包括一些文件:

有关Xamarin.iOS应用程序的解剖结构的更多信息,请参阅Xamarin.iOS应用程序的解剖 有关Xamarin.Android应用程序的解剖结构的更多信息,请参阅Xamarin.Android应用程序的解剖

架构与应用基础

Xamarin.Forms应用程序的架构与传统的跨平台应用程序相同。 共享代码通常放在便携式类库(PCL)中,平台特定的应用程序使用共享代码。 下图显示了Phoneword应用程序的这种关系的概述:

有关PCL的更多信息,请参阅便携式类库简介

为了最大程度地重用启动代码,Xamarin.Forms应用程序有一个名为App的类,负责实例化每个平台上应用程序显示的第一页,如下面的代码示例所示:

点击(此处)折叠或打开

  1. using Xamarin.Forms;
  2. using Xamarin.Forms.Xaml;

  3. [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
  4. namespace Phoneword
  5. {
  6.     public partial class App : Application
  7.     {
  8.         public App()
  9.         {
  10.             InitializeComponent();
  11.             MainPage = new MainPage();
  12.         }
  13.         ...
  14.     }
  15. }


该代码将App类的MainPage属性设置为MainPage类的新实例。 此外,XamlCompilation属性打开XAML编译器,使XAML直接编译成中间语言。 有关更多信息,请参阅XAML编译。

在每个平台上启动应用程序

iOS

要在iOS中启动最初的Xamarin.Forms页面,Phoneword.iOS项目包括继承自FormsApplicationDelegate类的AppDelegate类,如以下代码示例所示:

点击(此处)折叠或打开

  1. amespace Phoneword.iOS
  2. {
  3.     [Register ("AppDelegate")]
  4.     public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
  5.     {
  6.         public override bool FinishedLaunching (UIApplication app, NSDictionary options)
  7.         {
  8.             global::Xamarin.Forms.Forms.Init ();
  9.             LoadApplication (new App ());
  10.             return base.FinishedLaunching (app, options);
  11.         }
  12.     }
  13. }

FinishedLaunching override通过调用Init方法来初始化Xamarin.Forms框架。 这将导致在通过调用LoadApplication方法设置根视图控制器之前,将Xamarin.Forms的iOS特定实现加载到应用程序中。


Android

要在Android中启动Xamarin.Forms初始化页面,Phoneword.Droid项目包括使用MainLauncher属性创建活动的代码,活动继承自FormsApplicationActivity类,如以下代码示例所示:

点击(此处)折叠或打开

  1. namespace Phoneword.Droid
  2. {
  3.     [Activity (Label = "Phoneword.Droid",
  4.                Icon = "@drawable/icon",
  5.                MainLauncher = true,
  6.                ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
  7.     public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
  8.     {
  9.         protected override void OnCreate (Bundle bundle)
  10.         {
  11.             base.OnCreate (bundle);
  12.             global::Xamarin.Forms.Forms.Init (this, bundle);
  13.             LoadApplication (new App ());
  14.         }
  15.     }
  16. }
OnCreate覆盖通过调用Init方法来初始化Xamarin.Forms框架。 这将导致在加载Xamarin.Forms应用程序之前,将Xamarin.Forms的Android特定实现加载到应用程序中。


通用Windows平台

在通用Windows平台(UWP)应用程序中,从App类调用初始化Xamarin.Forms框架的Init方法:

点击(此处)折叠或打开

  1. Xamarin.Forms.Forms.Init (e);

  2. if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
  3. {
  4.   ...
  5. }

这导致将XAMarin.Forms的UWP特定实现加载到应用程序中。 最初的Xamarin.Forms页面由MainPage类启动,如下面的代码示例所示:

点击(此处)折叠或打开

  1. namespace Phoneword.UWP
  2. {
  3.     public sealed partial class MainPage
  4.     {
  5.         public MainPage()
  6.         {
  7.             this.InitializeComponent();
  8.             this.LoadApplication(new Phoneword.App());
  9.         }
  10.     }
  11. }


Xamarin.Forms应用程序加载了LoadApplication方法。

用户界面

用于创建Xamarin.Forms应用程序的用户界面的四个主要控制组。

  1. PagesXamarin.Forms页面代表跨平台移动应用程序屏幕。 Phoneword应用程序使用ContentPage类显示单个屏幕。有关页面的更多信息,请参阅Xamarin.Forms页面。
  2. LayoutsXamarin.Forms布局是用于将视图组合成逻辑结构的容器。 Phoneword应用程序使用StackLayout类在水平堆栈中排列控件。有关布局的更多信息,请参阅Xamarin.Forms布局。
  3. Views Xamarin.Forms视图是用户界面上显示的控件,如标签,按钮和文本输入框。 Phoneword应用程序使用Label,Entry和Button控件。有关视图的更多信息,请参阅Xamarin.Forms视图。
  4. Cells Xamarin.Forms单元格是用于列表中的项目的专用元素,并描述应如何绘制列表中的每个项目。 Phoneword应用程序不会使用任何单元格。有关细胞的更多信息,请参阅Xamarin.Forms Cells

在运行时,每个控件都将被映射到其本机的等价物,这将被渲染。

当Phoneword应用程序在任何平台上运行时,它将显示与Xamarin.Forms中的页面相对应的单个屏幕。 A页面表示Android中的ViewGroup,iOS中的View Controller,或通用Windows平台上的页面。 Phoneword应用程序还实例化一个ContentPage对象,该对象表示MainPage类,其XAML标记显示在以下代码示例中:

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ContentPage xmlns=""
  3.                          xmlns:x=""
  4.                          x:Class="Phoneword.MainPage">
  5.         ...
  6.         <StackLayout>
  7.             <Label Text="Enter a Phoneword:" />
  8.             <Entry x:Name="phoneNumberText" Text="1-855-XAMARIN" />
  9.             <Button x:Name="translateButon" Text="Translate" Clicked="OnTranslate" />
  10.             <Button x:Name="callButton" Text="Call" IsEnabled="false" Clicked="OnCall" />
  11.         </StackLayout>
  12. </ContentPage>

MainPage类使用StackLayout控件自动排列屏幕上的控件,无论屏幕大小如何。 每个子元素按照它们被添加的顺序垂直放置。 StackLayout控件包含一个Label控件来显示页面上的文本,一个Entry控件来接受文本用户输入,另外两个Button控件用于执行代码以响应触摸事件。


有关Xamarin.Forms中的XAML的更多信息,请参阅Xamarin.Forms XAML基础知识。

响应用户交互

XAML中定义的对象可以触发在代码隐藏文件中处理的事件。 以下代码示例显示MainPage类的代码隐藏中的OnTranslate方法,该方法是在“Translate”按钮上触发Clicked事件时执行的。

点击(此处)折叠或打开

  1. void OnTranslate(object sender, EventArgs e)
  2. {
  3.     translatedNumber = Core.PhonewordTranslator.ToNumber (phoneNumberText.Text);
  4.     if (!string.IsNullOrWhiteSpace (translatedNumber)) {
  5.         callButton.IsEnabled = true;
  6.         callButton.Text = "Call " + translatedNumber;
  7.     } else {
  8.         callButton.IsEnabled = false;
  9.         callButton.Text = "Call";
  10.     }
  11. }

OnTranslate方法将phoneword转换为相应的电话号码,作为响应,在通话按钮上设置属性。 XAML类的代码隐藏文件可以使用分配给它的名称使用x:Name属性访问XAML中定义的对象。 分配给此属性的值与C#变量具有相同的规则,因为它必须以字母或下划线开头,并且不包含嵌入空格。


翻译按钮到OnTranslate方法的接线发生在MainPage类的XAML标记中:

点击(此处)折叠或打开

  1. <Button x:Name="translateButon" Text="Translate" Clicked="OnTranslate" />




点击(此处)折叠或打开

  1. <Button x:Name="translateButon" Text="Translate" Clicked="OnTranslate" />
在Phoneword推出的其他概念

对于Xamarin.Forms的Phoneword应用程序介绍了本文未介绍的几个概念。 这些概念包括:

测试和部署

Visual Studio for Mac和Visual Studio都提供了许多用于测试和部署应用程序的选项。 调试应用程序是应用程序开发生命周期的常见部分,有助于诊断代码问题。 有关详细信息,请参阅设置断点,逐步代码和输出信息到日志窗口。

模拟器是开始部署和测试应用程序的好地方,并且具有用于测试应用程序的有用功能。 然而,用户不会在模拟器中使用最终的应用程序,所以应该在早期和经常在实际设备上进行测试。 有关iOS设备配置的详细信息,请参阅设备配置。 有关Android设备配置的更多信息,请参阅设置开发设备。

概要

本文使用Xamarin.Forms来研究应用程序开发的基础知识。 涵盖的主题包括Xamarin.Forms应用程序,架构和应用程序基础知识以及用户界面的解剖。

在本指南的下一部分中,应用程序将扩展到包含多个屏幕,以便探索更高级的Xamarin.Forms体系结构和概念。

上一篇:深入Xamarin.Forms
下一篇:你好,Xamarin.Forms