【轉】Xamarin Forms 介紹

來源:互聯網
上載者:User

標籤:android   des   style   blog   http   color   使用   os   

特此聲明,本篇博文轉自:http://blog.csdn.net/kinfey/article/details/29621381

什麼是 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 的方式載入資料

   1:  private async Task ExecuteLoadItemsCommand()
   2:          {
   3:              if (isBusy)
   4:                  return;
   5:   
   6:              IsBusy = true;
   7:   
   8:              try{
   9:   
  10:                  var httpClient = new HttpClient();
  11:   
  12:                  var feed="http://cnbeta.feedsportal.com/c/34306/f/624776/index.rss";
  13:   
  14:   
  15:                  var responseString = await httpClient.GetStringAsync(feed);
  16:   
  17:                  FeedItems.Clear();
  18:   
  19:                  var items= await ParseFeed(responseString);
  20:   
  21:                  foreach(var item in items)
  22:                  {
  23:   
  24:                      //Console.WriteLine(item.Title);
  25:                      FeedItems.Add(item);
  26:                  }
  27:              }
  28:              catch(Exception ex){
  29:   
  30:                  var page = new ContentPage ();
  31:   
  32:                  var result = page.DisplayAlert ("出錯 ", "載入失敗.", "確認", null);
  33:   
  34:              }
  35:   
  36:              IsBusy = false;
  37:   
  38:          }
 
 
 
   1:  private async Task<List<FeedItem>> ParseFeed(string rss)
   2:          {
   3:              return await Task.Run (() => {
   4:                  var xdoc=XDocument.Parse(rss);
   5:   
   6:                  var id=0;
   7:   
   8:                  return ( from item in xdoc.Descendants("item")
   9:                      select new FeedItem
  10:                      {
  11:                          Title = (string)item.Element("title"),
  12:                          Description=(string)item.Element("description"),
  13:                          PublishDate=(string)item.Element("pubDate"),
  14:                          Id= id++
  15:                      }).ToList();
  16:              });
  17:          }

5. 通過Xamarin Forms 構造View

          這裡需要建立一個簡單的表單ListView, 和自訂Cell, 當然Xamarin Forms會依舊平台進行相應渲染產生原生的表單支援

   1:  public class FeedView : ContentPage
   2:      {
   3:          private FeedViewModel ViewModel{
   4:              get {  return BindingContext as FeedViewModel;  }
   5:          }
   6:   
   7:          public FeedView ()
   8:          {
   9:   
  10:              BindingContext = new FeedViewModel ();
  11:   
  12:              var stack = new StackLayout {
  13:                  Orientation= StackOrientation.Vertical,
  14:                  Padding = new Thickness(0,8,0,8)
  15:              };
  16:   
  17:              var listView = new ListView ();
  18:   
  19:   
  20:              listView.ItemsSource = ViewModel.FeedItems;
  21:   
  22:              var cell = new DataTemplate (typeof(ListTextCell));
  23:   
  24:              cell.SetBinding (TextCell.TextProperty, "Title");
  25:   
  26:              cell.SetBinding (TextCell.DetailProperty, "PublishDate");
  27:   
  28:              listView.ItemTemplate = cell;
  29:   
  30:   
  31:              stack.Children.Add (listView);
  32:   
  33:              Content = stack;
  34:          }
  35:   
  36:          protected override void OnAppearing()
  37:          {
  38:              base.OnAppearing ();
  39:   
  40:              if (ViewModel == null || !ViewModel.CanLoadMore || ViewModel.IsBusy || ViewModel.FeedItems.Count > 0)
  41:                  return;
  42:   
  43:              ViewModel.LoadItemsCommand.Execute (null);
  44:          }
  45:      }

6. 運行看看

歡迎大家下載My Code看看 點擊下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.