Xamarin.Forms 和 Xamarin 跨平台之间的区别

2024-01-27

我已经使用 Xamarin 环境 2 年了,主要使用 Xamarin.Forms。但是,我不知道 Xamarin 跨平台是什么?谁能提供一些结构差异?


当我们谈论 Xamarin 时,本机应用程序的开发有两种方法:

  • 传统的 Xamarin 方法
  • Xamarin.Forms

Xamarin 网站有一个很好的引用

到处共享代码。使用相同的语言、API 和数据结构 在所有移动开发中平均共享 75% 的应用程序代码 平台。使用 Xamarin.Forms 构建用户界面并分享 100%。

重要提示是,这些数字可能因项目而异,因此这是 Xamarin 一般使用的一些假设。

正如您从下图中看到的,这两种方法之间的“差异”。传统的 Xamarin 方法(Xamarin.iOS 和 Xamarin.Android)均构建在 Mono(.NET Framework 的开源版本)之上。要开发这些应用程序,您可以使用 C#,并且有机会共享高达 75% 的代码库,如下图所示以及 Xamarin 的引用。

Using Xamarin 传统版您可以使用 C# 作为编程语言来编写模型、调用 Web 服务等。因此,您只需编写一次代码逻辑,然后在 Xamarin.Android 和 Xamarin.iOS 项目以及这些单独的项目中使用/共享它您正在编写特定于该平台的代码,并且您可以访问其 API。

另外,Xamarin 引用了关于传统方法的一段话:

在 Objective-C、Swift 或 Java 中可以做的任何事情都可以在 C# 中完成 使用 Visual Studio 与 Xamarin 一起使用。

And project structure with Xamarin traditional looks like this: enter image description here

  • 共享代码项目:对于其他项目来说是通用且可重用的代码库。
  • Xamarin.Android:适用于您的 Android 应用程序的项目,您可以在其中使用 Android 特定的 API 编写代码、编写 UI 代码等。
  • Xamarin.iOS:您正在编写代码的 iOS 应用程序的项目 使用 iOS 特定的 API、编写 UI 代码等。

有关 Xamarin 传统版的更多信息here https://www.xamarin.com/platform.

现在关于Xamarin.Forms,最好的定义引用自Xamarin网站:

Xamarin.Forms 是一个允许开发人员快速创建 跨平台用户界面。它提供了自己的抽象 将使用 iOS 上的本机控件呈现的用户界面, Android、Windows 或 Windows Phone。这意味着应用程序可以 共享大部分用户界面代码并仍然保留 目标平台的本机外观和感觉。

正如您从上面的文本中可以得出的结论,Xamarin.Forms 是一个框架,允许您使用 C# 或 XAML 编写 UI,并有机会使用 MVVM...使用 Xamarin.Forms,您可以编写代码库和 UI,这将跨平台共享。

注意:这是一个非常简单的项目结构,当然,您可以为不同的层添加更多项目

  • 共享代码项目:保存您的通用代码库,并且因为您使用的是 Xamarin.Forms,所以您可以为您的 UI 编写代码
  • Xamarin.iOS 和 Xamarin.Android:特定平台的代码,以及一些高级主题,例如自定义渲染器和依赖项服务。

当然,如果您使用的是开箱即​​用的 Xamarin.Forms,则存在一些限制,例如您只能使用所有平台上通用的 UI 控件。您可以阅读我关于 Xamarin.Forms 优缺点的博客文章here https://almirvuk.blogspot.ba/2016/12/xamarinforms-pros-and-cons.html.

有关 Xamarin.Forms 的更多信息here https://www.xamarin.com/forms.

我希望这个答案不会让您感到困惑,并作为一两句话的结论......使用Xamarin传统的你可以分享你的代码逻辑在特定于平台的项目之间,并使用 Xamarin.Forms 您可以共享代码逻辑并且用户界面代码跨您的项目。

注意:对于共享项目和代码共享策略,您可以使用“共享项目”和“PCL”,这是另一个问题的主题...所以在这个答案中,我简化了这一点,并在中使用共享项目术语来表示该类型的项目Xamarin 应用解决方案。

2020 年夏季更新:

.NET Maui 于 2020 年 5 月发布,有关 MAUI 和 Xamarin.Forms 之间差异的问题可以在 StackOverflow 线程中找到:什么是毛伊岛? MAUI 和 Xamarin 之间有什么区别 https://stackoverflow.com/questions/62729794/what-is-maui-and-what-are-differences-between-maui-and-xamarin

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin.Forms 和 Xamarin 跨平台之间的区别 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • Flutter - 根据登录状态使用不同的路由启动应用程序

    我正在寻找一种根据登录状态在应用程序启动时显示不同屏幕的方法 例如 我定义了以下路由 home login 设置 当然 我会检查用户是否已经在main 方法 然后设置initialRoute我的 MaterialApp 到 login 或
  • 使用 switch 语句可以解决的最大情况数

    这是出于好奇 单个开关盒最多可以有多少个switch包括default 案件 我的意思是这样的 switch ch case 1 some statement break case 2 some statement break case n
  • ubuntu 中的单声道和非托管代码

    我使用的是单声道 2 10 在 Ubuntu 12 x64 上运行 现在我需要知道如何使用非托管代码 DllImport libc so public static extern int getpid 并且 在下一步中我有 getpid 我
  • 部署qt mysql应用程序

    我开发了一个使用 Qt MySQL 的应用程序 connection QSqlDatabase addDatabase QMYSQL 我已经成功编译了 mysql 驱动程序 我的应用程序可以运行 一切都很好 现在我正在尝试部署我的应用程序
  • Eclipse+Pydev 中转到定义的[快捷方式/其他方式]是什么

    我以前用过WingIde 其中我经常使用的快捷方式 f4 默认 是 Goto 定义 它将打开定义文件 并将我带到它 eclipse pydev 有类似的快捷方式吗 For Aptana Pydev you have Go To Defini
  • R / RStudio:高 dpi 屏幕上的图形缩放问题和模糊性

    在高 DPI 4K 显示器上 Windows 下的 RStudio 绘图窗口似乎使用像素加倍来使绘图清晰 我使用的是 RStudio 0 99 483 和 R 3 2 2 以及 Windows 8 1 但在 Windows 10 下结果相同
  • AWS Sagemaker 自定义用户算法:如何利用额外实例

    这是一个基本的 AWS Sagemaker 问题 当我使用 Sagemaker 的内置算法之一进行训练时 通过增加训练算法的 instance count 参数 我能够利用将作业分配到许多实例所带来的巨大加速 然而 当我打包自己的自定义算法
  • BGL 添加具有多个属性的边

    我希望所有边缘都具有属性 重量和容量 我发现 BGL 已经定义了这两个 所以我为图定义了边和顶点属性 typedef property
  • AngularJS 锚点点击第二次不起作用

    这是我的Demo http plnkr co edit GArzH9gTQCd0r53WhuWO p preview app run function rootScope location anchorScroll when the rou
  • Google Analytics 自定义变量不起作用

    我想在 Google Analytics 中设置用户详细信息 我使用以下语法 但无法捕获登录应用程序的用户的使用情况 ga set employeetype permanent ga set employeetype vendor ga s
  • (目标 C)在没有撰写屏幕的情况下打开默认的 Apple Mail 应用程序、Yahoo Mail 或 Safari?

    我有一个按钮 当点击它时 它会让我们在默认邮件应用程序 雅虎邮件和 Safari 之间进行选择来阅读收件箱 目前我正在使用 NSURL mailURL NSURL URLWithString mailto email protected c
  • Silverlight 4 拖放替代方案

    我想添加将用户控件从 Silverlight 4 页面的一个部分拖动到同一页面上的另一个用户控件的功能 不是谈论将文件从操作系统拖动到页面上的新 Silverlight 4 功能 什么方法最直接 哪种方法提供最大的灵活性 这是我迄今为止发现
  • sql 查询计算总和并添加前几行的总和

    这是我的T1桌 dat dt credit debit 22 02 2019 10 5 25 02 2019 30 60 10 03 2019 50 40 13 03 2019 100 10 我想生成以下输出 max date cr sum
  • 有什么方法可以获取 C# 中调用对象的引用吗?

    我想知道是否可以 例如 遍历堆栈帧 检查每个调用对象以查看是否与接口匹配 如果是 则从中提取一些数据 是的 我知道这是不好的做法 我想知道这是否可能 不 不存在 至少不使用某种描述的分析 调试 API 就不会 您可以遍历堆栈来查找调用met
  • $onloaded 为新引用触发一次 AngularFire 0.5.0

    假设我们正在使用推送状态导航路线 locationProvider html5Mode true 有两条路线有两个不同的控制器 stateProvider state one url one templateUrl one html con
  • 以编程方式更改 R.string 的值?

    我正在寻找一种动态更改字符串资源值的方法 我尝试使用反射 但它声称 字段值无效 我在布局中使用字符串作为值 但需要将它们交换为不同的语言 请参阅下面所附的代码 public class Lang public static void lan
  • 执行一些代码,然后进入交互节点

    有没有办法在进入 Node js 中的交互模式之前执行一些代码 在文件中或从字符串中 并不重要 例如 如果我创建一个脚本 preamble js其中包含 console log preamble executed poor guy 和用户类
  • 使用 gradle 对嵌入 glassfish 的 jar 进行容器测试失败

    我正在使用 JUnit 和嵌入式 glassfish 来使用 CDI 测试一些代码 这看起来相当简单 但我一定错过了一些东西 我创建了一个简单的项目来演示该问题 https github com dantwinkler container
  • 如何在用户离开页面时删除文件?

    我有一个表单 其操作设置为 php 文件 verify php 在表单中 我制作了一个非常漂亮的图片上传部分 提交表单后 将打开 verify php 以验证用户填写的表单 表单值全部放置在 verify php 页面上的另一个表单内 仅将
  • Xamarin.Forms 和 Xamarin 跨平台之间的区别

    我已经使用 Xamarin 环境 2 年了 主要使用 Xamarin Forms 但是 我不知道 Xamarin 跨平台是什么 谁能提供一些结构差异 当我们谈论 Xamarin 时 本机应用程序的开发有两种方法 传统的 Xamarin 方法