博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xamarin.Forms 初探
阅读量:5275 次
发布时间:2019-06-14

本文共 3484 字,大约阅读时间需要 11 分钟。

什么是 Xamarin Forms ?

       Xamarin Forms 是一个高效创建跨平台用户界面的库 。通过Xamarin Forms 能够一次编码生成基于主流移动平台(iOS, Android, Windows Phone)的应用界面。和HTML 5 不同, 它是一套原生的界面解决方式,这意味着通过Xamarin Forms 渲染的界面是与底层API 紧密相连, 那你能够结合诸如iOS 中的Core Motion , PassKit 还有StoreKit 这些API 使用 ,也能够使用诸如NFC / Google Play Service 的Android API ,当然少不了Windows Phone 的Tiles 。

Xamarin Forms 的优势

       通过一次编码,生成多平台界面。假若你做的工作涉及到三个平台,那你会对重反复复的界面逻辑工作厌烦,Xamarin Forms 真的是一个不错的解决方式。

使用 Xamarin Forms 

       你能够通过C#硬编码方式去架构你的界面,还有你能够通过XAML方式去构建。 

Xamarin Forms 能适配的界面

     Pages (页面)  

    

    Layout(布局)  

     

     Controls(控件)

   

好来看看一个简单的样例,因为这篇文章仅仅是初探,我仅仅会把部分精彩的节录下来,大家能够下载代码细看。假设要探究就继续关注我的blog , 接下来会陆续有关于Xamarin Forms 的更深入文章。

      1. 创建Xamarin.Forms 项目      

     

     这里须要说明一点,Xamarin Forms项目有两种模版一种是基于Share Project ,一种是基于PCL ,这里要看各自项目的须要,我默认选取PCL(关于两个模版的使用,我会在之后文章和大家说说)

   2. 创建成功后,会生成包括CnBetaDemo.Shared,CnBetaDemo.iOS, CnBetaDemo.Android 三个项目(假设你用Visual Studio 创建你就会有CnBetaDemo.Windows Phone 的项目) 。 CnBetaDemo.Shared就是我们须要处理的共享逻辑层和Xamarin.Forms。其余两个就是我们所须要相应的平台。 

   3.根据MVVM 方式架构我们的CnBetaDemo.Shared , 这里不得不提到Xamarin 的原理 。Xamarin 是一个基于共享逻辑层的跨平台原生应用方案。

   

    为何用MVVM 在我之前文章有所提及。(博客决定放到csdn,我会迁移后贴上地址)。之前一年的做法是把逻辑共享,如今能够把页面通过Xamarin.Forms进行构造就可以,所以CnBetaDemo.Shared就成为了我们跨平台架构项目的核心代码层。

    4.  简单看看ViewModel层 ,这里我以读取CnBeta RSS 为例 ,FeedViewModel 的一些主要代码:

         主要通过async和await 的方式载入数据

private async Task ExecuteLoadItemsCommand()		{			if (isBusy)				return;			IsBusy = true;			try{				var httpClient = new HttpClient();				var feed="http://cnbeta.feedsportal.com/c/34306/f/624776/index.rss";				var responseString = await httpClient.GetStringAsync(feed);				FeedItems.Clear();				var items= await ParseFeed(responseString);				foreach(var item in items)				{					//Console.WriteLine(item.Title);					FeedItems.Add(item);				}			}			catch(Exception ex){				var page = new ContentPage ();				var result = page.DisplayAlert ("出错 ", "载入失败.", "确认", null);			}			IsBusy = false;		}

       

private async Task
> ParseFeed(string rss) { return await Task.Run (() => { var xdoc=XDocument.Parse(rss); var id=0; return ( from item in xdoc.Descendants("item") select new FeedItem { Title = (string)item.Element("title"), Description=(string)item.Element("description"), PublishDate=(string)item.Element("pubDate"), Id= id++ }).ToList(); }); }

       5. 通过Xamarin Forms 构造View 

          这里须要创建一个简单的表单ListView, 和自己定义Cell, 当然Xamarin Forms会依然平台进行对应渲染生成原生的表单支持

public class FeedView : ContentPage	{		private FeedViewModel ViewModel{			get {  return BindingContext as FeedViewModel;  }		}		public FeedView ()		{			BindingContext = new FeedViewModel ();			var stack = new StackLayout {				Orientation= StackOrientation.Vertical,				Padding = new Thickness(0,8,0,8)			};			var listView = new ListView ();			listView.ItemsSource = ViewModel.FeedItems;			var cell = new DataTemplate (typeof(ListTextCell));			cell.SetBinding (TextCell.TextProperty, "Title");			cell.SetBinding (TextCell.DetailProperty, "PublishDate");			listView.ItemTemplate = cell;			stack.Children.Add (listView);			Content = stack;		}		protected override void OnAppearing()		{			base.OnAppearing ();			if (ViewModel == null || !ViewModel.CanLoadMore || ViewModel.IsBusy || ViewModel.FeedItems.Count > 0)				return;			ViewModel.LoadItemsCommand.Execute (null);		}	}

      6. 执行看看

     

     

     

       非常Cool吧 !!哈哈!! 欢迎大家下载我的代码看看 

        对于Xamarin 本人一直非常推崇,有了Xamarin Forms更如虎添翼。这里须要排除价格,当然假设是在企业真的能够节省不少。或者你是一个Objective-C 的支持者, 或者是一个Java开发Android的深度码农,可是无可否认Xamarin 能够解决得很多其它。  

        非常开心在CSDN和大家分享,接下来博客在这里安家,也希望大家多和我交流,谢谢!

转载于:https://www.cnblogs.com/mfrbuaa/p/4089774.html

你可能感兴趣的文章
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>
排序sort (一)
查看>>
Parrot虚拟机
查看>>
Teamcenter10 step-by-step installation in Linux env-Oracle Server Patch
查看>>
Struts2学习(三)
查看>>
Callable和Runnable和FutureTask
查看>>
GitHub 多人协作开发 三种方式:
查看>>
文本域添加编辑器
查看>>
Yum安装MySQL以及相关目录路径和修改目录
查看>>
java获取hostIp和hostName
查看>>
关于web服务器和数据库的各种说法(搜集到的)
查看>>
《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
OMG: daily scrum nine
查看>>