Xamarin.Forms跨平台移动开发入门指南

Viewed 0

什么是Xamarin?

Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。它的产品简化了针对多种平台的应用开发,包括iOS、Android、Windows Phone和Mac App。Xamarin由许多著名的开源社区开发者创立和参与,也是Mono项目的主导者——C#与.NET框架的开源、跨平台实现。

那么什么是Xamarin.Forms?

Xamarin.Forms是一个允许开发人员快速创建跨平台UI界面的框架,意为“可移植的UI”。它为iOS、Android、Windows或Windows Phone上的原生UI呈现提供了自己的抽象,这意味着应用程序可以共享大部分用户界面代码。Xamarin.Forms允许快速创建应用程序,并随时间演变为复杂应用。由于Xamarin.Forms应用程序是原生应用程序,因此没有额外的使用限制,能够利用原生平台的任何API或功能,例如iOS上的CoreMotion、PassKit和StoreKit,以及Android上的NFC和Google Play服务。

在Xamarin.Forms中创建UI界面有两种技术:第一种是用C#源码创建UI,第二种是使用可扩展应用程序标记语言(XAML),这是一种用于描述用户界面的声明式标记语言。

为什么要学习Xamarin.Forms?

在移动应用发展迅速的今天,APP必须兼容多个平台,且APP的构建主要涉及界面构建(业务逻辑通常放在服务端处理)。虽然WebApp可以解决跨平台问题,但原生APP开发仍是主流,涵盖iOS、Android和Windows Phone等平台。每个平台都需要单独构建界面,过程繁琐且学习曲线陡峭。Xamarin.Forms应运而生,实现了“一次编写,多平台编译”,显著提高了开发效率。

今天的学习内容

今天主要学习Xamarin.Forms中提供的各类页面。

1. 创建跨平台的可移植项目

首先新建一个项目,选择可移植的类库(PCL),因为共享项目在新建页面时可能存在问题,不推荐使用。项目创建后,会得到几个程序集:第一个是可移植类库,这是编写代码的主要地方;下面两个分别是Android和iOS程序集。调试时,根据需要设置相应的程序集为启动项(调试iOS需要Mac)。由于是跨平台项目,通常不需要编写下面两个程序集。

项目创建完成后,即可开始编写代码。

1. ContentPage(内容页)

进入项目后,会发现已经创建好了一些必要的页面。每个xaml文件都对应一个cs文件,类似于Windows Forms的开发方式。App.xaml中的代码类似于Windows Forms中的Program.cs,用于启动项目。

MainPage.xaml继承自ContentPage,这是最基础的页面,类似于Android开发的Activity。所有基础界面都需要继承它。ContentPage只是一个内容容器,不具体呈现任何内容,需要配合各类控件才能展现画面。

在xaml的标签下编写代码,例如使用StackLayout和Button控件来创建界面。

2. CarouselPage(滑动页)

CarouselPage主要提供滑动效果,可以放置多个内容页。在xaml中,定义多个ContentPage作为子页面,每个页面包含不同的布局和控件。后台代码只需继承Xamarin.Forms.CarouselPage即可。在MainPage中,通过Navigation.PushModalAsync方法跳转到CarouselPage。

3. MasterDetailPage(主次页面)

MasterDetailPage模仿了类似手机QQ点击头像弹出侧边栏的效果,主页面隐藏,次页面显示。它包含Master(主页面)和Detail(次页面)两个属性。创建时,会生成多个文件:主入口文件继承Xamarin.Forms.MasterDetailPage,而Master和Detail页面通常继承ContentPage。这样就能构建一个基础的MasterDetailPage结构,并通过导航实现页面跳转。

4. TabbedPage(Tab页面)

TabbedPage是常见的标签页界面。创建后,在xaml中添加多个ContentPage作为标签页,每个页面设置Title属性来定义标签名称。TabbedPage会自动生成标签导航。需要注意的是,iOS和Android平台上的标签位置可能不同:iOS标签通常在底部,而Android标签可能在上部(后续章节会介绍如何重写以统一位置)。

写在最后

Xamarin.Forms是Xamarin框架的重要组成部分,支持跨平台移动开发。通过学习各种页面类型,开发者可以高效构建原生应用界面。本系列教程将继续深入Xamarin.Forms的其他功能。

0 Answers