Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6552630
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2017-12-28 20:51:29

介绍Xamarin.Forms
2014年5月28日,Xamarin推出了Xamarin.Forms,它允许您编写可以为iOS,Android和Windows设备编译的用户界面代码。
Xamarin.Forms选项
Xamarin.Forms支持五种不同的应用程序平台:
  • iOS适用于在iPhone,iPad和iPod Touch上运行的程序。
  • Android适用于在Android手机和平板电脑上运行的程序。
  • 通用Windows平台(UWP)适用于在Windows 10或Windows 10 Mobile下运行的应用程序。
  • Windows 8.1的Windows运行时API。
  • Windows Phone 8.1的Windows运行时API。
在本书中,“Windows”或“Windows Phone”通常被用作通用术语来描述所有三种Microsoft平台。
在一般情况下,Visual Studio中的Xamarin.Forms应用程序由五个独立的项目组成,其中第五个项目包含通用代码。 但Xamarin.Forms应用程序中的五个平台项目通常非常小,通常由仅包含一些样板启动代码的存根组成。 PCL或SAP包含应用程序的大部分,包括用户界面代码。 下图仅显示iOS,Android和通用Windows平台。另外两个Windows平台与UWP类似。

Xamarin.Forms.Core和Xamarin.Forms.Xaml库实现了Xamarin.Forms API。 取决于平台,Xamarin.Forms.Core然后使用Xamarin.Forms.Plat?形式库之一。 这些库大部分是一个名为renderer的类的集合,它将Xamarin.Forms用户界面对象转换为特定于平台的用户界面。
该图的其余部分与前面显示的相同。
例如,假设您需要前面讨论的允许用户切换布尔值的用户界面对象。 当为Xamarin.Forms编程时,这称为一个开关,并且一个名为Switch的类在Xamarin.Forms.Core库中实现。 在三个平台的单独渲染器中,此交换机映射到iPhone上的UISwitch,Android上的Switch和Windows Phone上的ToggleSwitch。
Xamarin.Forms.Core还包含一个名为Slider的类,用于显示用户操纵来选择数值的水平条。 在特定于平台的库中的渲染器中,它被映射到iPhone上的UISlider,Android上的SeekBar和Windows Phone上的Slider。
这意味着,当你编写一个具有Switch或Slider的Xamarin.Forms程序时,实际显示的是每个平台中实现的相应对象。
这里有一个Xamarin.Forms程序,其中包含一个标签:“Hello,Xamarin.Forms!”,一个按钮“Click Me!”,一个开关和一个Slider。 该程序正在运行(从左到右)iPhone,Android手机和Windows 10移动设备。


iPhone截图是运行iOS 9.2的iPhone 6模拟器。 Android手机是运行Android版本6的LG Nexus 5。Windows 10 Mobile设备是运行Windows 10技术预览的诺基亚Lumia 935。
在本书中你会遇到像这样的三重截图。 它们总是以相同的顺序(iPhone,Android和Windows 10 Mobile)运行,并且始终运行相同的程序。
正如你所看到的,Button,Switch和Slider在三部手机上都有不同的外观,因为它们都是用特定于每个平台的对象来呈现的。
更有趣的是在这个程序中包含了六个ToolBarItem对象,其中三个被标识为带有图标的主要项目,另外三个被作为没有图标的辅助项目。 在iPhone上,这些使用UIBarButtonItem对象呈现为页面顶部的三个图标和三个按钮。 在Android上,前三个在ActionBar上呈现为项目,也在页面的顶部。 在Windows 10 Mobile上,它们被实现为页面底部CommandBar上的项目。
Android ActionBar具有垂直省略号,通用Windows平台CommandBar具有水平省略号。 点击这个省略号会导致次要项目以适合这两个平台的方式显示。

Xamarin.Forms最初被设想为移动设备平台无关的API。 怎么样,Xamarin.Forms不仅限于手机。 这是iPad Air 2模拟器上运行的程序。

本书中的大部分程序相当简单,因此设计为在纵向模式下在手机屏幕上显示最佳效果。 但是它们也将以横向模式和平板电脑运行。
这是运行Windows 10的Microsoft Surface Pro 3上的UWP项目。

注意屏幕顶部的工具栏。 省略号已经被按下来显示三个辅助项目。
Xamarin.Forms支持的另外两个平台是Windows 8.1和Windows Phone 8.1。 下面是在Windows 10桌面窗口中运行的Windows 8.1程序以及在Windows 10 Mobile设备上运行的Windows 8.1程序:

用鼠标左键单击Windows 8.1屏幕以显示机器人项目。 在此屏幕上,辅助项目位于左侧,但程序忽略忘记将其分配给图标。 在Windows Phone 8.1屏幕上,底部的省略号被按下。
工具栏的各种实现表明,从某种意义上说,Xamarin.Forms是一种API,它不仅可以虚拟化每个平台上的用户界面元素,而且还可以虚拟化用户界面程序。
XAML支持
Xamarin.Forms还支持在Microsoft开发的基于XML的可扩展应用程序标记语言XAML(发音为“camel”韵母“zammel”),作为用于实例化和初始化对象的通用标记语言。 XAML并不局限于定义用户界面的初始布局,而是历史上最常用的方式,这就是Xamarin.Forms中的用法。
以下是刚刚看到的截图的XAML文件:

点击(此处)折叠或打开

  1. <ContentPage xmlns=""
  2.              xmlns:x=""
  3.              x:Class="PlatformVisuals.PlatformVisualsPage"
  4.              Title="Visuals">
  5.        <StackLayout Padding="10,0">
  6.            <Label Text="Hello, Xamarin.Forms!"
  7.                   FontSize="Large"
  8.                   VerticalOptions="CenterAndExpand"
  9.                   HorizontalOptions="Center" />
  10.            <Button Text = "Click Me!"
  11.                    VerticalOptions="CenterAndExpand"
  12.                    HorizontalOptions="Center" />
  13.            <Switch VerticalOptions="CenterAndExpand"
  14.                    HorizontalOptions="Center" />
  15.            <Slider VerticalOptions="CenterAndExpand" />
  16.        </StackLayout>

  17.        <ContentPage.ToolbarItems>
  18.            <ToolbarItem Text="edit" Order="Primary">
  19.                <ToolbarItem.Icon>
  20.                    <OnPlatform x:TypeArguments="FileImageSource"
  21.                                iOS="edit.png"
  22.                                Android="ic_action_edit.png"
  23.                                WinPhone="Images/edit.png" />
  24.                </ToolbarItem.Icon>
  25.            </ToolbarItem>
  26.          
  27.            <ToolbarItem Text="search" Order="Primary">
  28.                <ToolbarItem.Icon>
  29.                    <OnPlatform x:TypeArguments="FileImageSource"
  30.                                iOS="search.png"
  31.                                Android="ic_action_search.png"
  32.                                WinPhone="Images/feature.search.png" />
  33.                </ToolbarItem.Icon>
  34.            </ToolbarItem>

  35.            <ToolbarItem Text="refresh" Order="Primary">
  36.                <ToolbarItem.Icon>
  37.                    <OnPlatform x:TypeArguments="FileImageSource"
  38.                                iOS="reload.png"
  39.                                Android="ic_action_refresh.png"
  40.                                WinPhone="Images/refresh.png" />
  41.                </ToolbarItem.Icon>
  42.            </ToolbarItem>

  43.            <ToolbarItem Text="explore" Order="Secondary" />
  44.            <ToolbarItem Text="discover" Order="Secondary" />
  45.            <ToolbarItem Text="evolve" Order="Secondary" />
  46.        </ContentPage.ToolbarItems>
  47. </ContentPag>
除非您有使用XAML的经验,否则某些语法细节可能会有些模糊。 (别担心,本书稍后会详细介绍它们)。但即便如此,您仍然可以看到Label,Button,Switch和Slider标签。 在一个真正的程序中,按钮,开关和滑块可能会附带事件处理程序,这些处理程序将在C#代码文件中实现。 在这里他们没有。 VerticalOptions和HorizontalOptions属性有助于布局; 他们将在下一章讨论。
平台特异性
在涉及ToolbarItem的XAML文件的部分中,您还可以看到名为OnPlat?form的标签。这是Xamarin.Forms中的几种技术之一,它允许在平台独立的代码或标记中引入一些平台特性。这里使用它是因为每个单独的平台都有与这些图标相关的图像格式和大小要求有所不同。
Device类中存在类似的设施。可以确定代码在哪个平台上运行,并根据平台选择值或对象。例如,您可以为每个平台指定不同的字体大小,或者基于平台运行不同的代码块。您可能希望让用户操作Slider以在一个平台中选择一个值,但是从另一个平台中的一组显式值中选择一个数字。
在某些应用中,可能需要更深层次的平台特性。例如,假设您的应用需要用户手机的GPS坐标。这不是Xamarin.Forms提供的,所以你需要编写你自己的代码来获取这个信息。
DependencyService类提供了一种以结构化方式完成此任务的方法。您可以使用所需的方法(例如IGetCurrentLocation)定义接口,然后在每个平台项目中使用类实现该接口。然后,您可以从Xamarin.Forms项目中调用该接口中的方法,就像它是API的一部分一样。
每个标准的Xamarin.Forms可视对象 - 如Label,Button,Switch和
滑块 - 由各种Xamarin.Forms.Platform库中的渲染器类支持。 每个渲染器类都实现映射到Xamarin.Forms对象的特定于平台的对象。
您可以使用自己的自定义渲染器创建自己的自定义视觉对象。 自定义可视对象进入通用代码项目,自定义渲染器进入单个平台项目。 为了使它更容易一些,通常你会想从现有的类派生。 在单独的Xamarin.Forms平台库中,所有相应的渲染器都是公共类,您也可以从它们派生出来。
Xamarin.Forms允许你作为平台独立或作为你需要的平台特定。 Xamarin.Forms不会取代Xamarin.iOS和Xamarin.Android; 相反,它与他们融为一体。
一个跨平台的灵丹妙药?
在大多数情况下,Xamarin.Forms定义了其抽象,侧重于iOS,Android和Windows运行时API常见的移动用户界面领域。这些Xamarin.Forms可视对象被映射到特定于平台的对象,但是Xamarin.Forms倾向于避免实现对特定平台唯一的任何事情。
因此,尽管Xamarin.Forms在创建平台独立应用程序方面提供了巨大的帮助,但它不是完全取代原生API编程。如果您的应用程序严重依赖于本地API功能(例如特定类型的控件或小部件),那么您可能想要坚持使用Xamarin.iOS,Xamarin.Android和本机Windows Phone API。
您可能还需要坚持使用本地API来处理需要矢量图形或复杂触摸交互的应用程序。 Xamarin.Forms的当前版本还没有准备好用于这些场景。
另一方面,Xamarin.Forms非常适用于原型设计或快速验证概念应用程序。在完成之后,您可能会发现可以继续使用Xamarin.Forms功能来构建整个应用程序。
 Xamarin.Forms是业务线应用程序的理想选择。即使您开始使用Xamarin.Forms构建应用程序,然后使用平台API实现它的主要部分,您也可以在允许您共享代码提供结构化的方法来制作平台特定的视觉效果。
阅读(3847) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~