日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

是时候开始用C#快速开发移动应用了

發布時間:2023/12/4 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 是时候开始用C#快速开发移动应用了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從2015年接觸Xamarin到至今已經2個年頭,我對Xamarin的技能沒有長進多少,但它卻已經足夠成熟到在跨平臺移動開發工具中占有一席之地。在掃了一些資料之后,突然發現國外有很多移動端的應用已經是用Xamarin開發,Telerik還有專門的團隊來開發Xamarin UI 庫,這再次激發起了我的興趣!嚇得我趕緊找了個視頻做了個demo, 下面就一起來體驗一下用C# 開發一個Material Deisgn風格的Android應用的樂趣吧。

先來看一下我們開發出來的應用是個什么樣子?一個酷炫的tab view 和 list

下面是一個左側菜單

這是一個Collapsing Tool Bar的實現效果

最后還有一個bottom sheet

  

整個例子中好玩的地方非常多,我們分為UI和C#代碼兩塊來看。因為在整個UI層幾乎是和原生Android開發一模一樣,所以如果原來做過Android開發又懂C#,那用Xamarin來開發安卓程序幾乎是沒有什么學習成本 。那么對于沒有Android開發經驗的C#同學來說,學習Android的UI繪制則是必不可少的部份。

?

UI層的開發

  • Layout 與 Widget

  • Material Design 和 Android Support Library?

  • AppbarLayout + TabLayout

  • DrawerLayout + NavigationView?

  • CollapsingLayout + NestedView + CardView

  • ListView 與 RecyclerView?

C#代碼完成的那些事

  • 控件與事件綁定

  • Activity 之間數據傳遞

  • 多線程

Layout與Widget

Android的頁面視圖由XML來聲明,而所有頁面的這些UI組件都由一個布局(Layout)來組織。Android最早一共提供了6種基本布局。

  • Linear Layout

  • Relative Layout

  • Table Layout

  • Grid View

  • Tab Layout

  • List View

Widget則是一些其它的UI組件

  • Date Picker

  • Time Picker

  • Form Elements(Button, TextView, CheckBox, RadioButton, Toggle Button, Rating Bar)

  • Spinner

  • Auto Complete

  • Gallery

  • WebView

  • Tool Bar

  • View Pager

  • 等...

?

我們將會在后續的文章來詳細再介紹這些Layout 和 Widgets的使用,今天我們的主角不是他們。而是Google基本Material Design 為android 開發的一套Design Support Library。

?

Material Design?和 Design Support Library

關于Material Deisgn已經有一份非常詳細的中文文檔http://design.1sters.com/,Google在2014年推出的全新的設計語言,這種設計語言旨在為手機、平板電腦、臺式機和“其他平臺”提供更一致、更廣泛的“外觀和感覺”。Google遵循MD設計風格重構了自己的幾個主要APP并發布了安卓的DesignSupportLibrary來讓大家更好地開發基于這種設計風格的APP。

我們的Demo中用到的組件包括:

  • AppBarLayout + Tab Layout 實現 圖1中的Tab視圖

  • Drawer Layout +?Navigation View 實現圖3中的左側菜單

  • CoordinatorLayout

  • CollapsingToolbar Layout + NestedScrollView (圖2中的頁面往下滾圖片縮小直到消失的效果實現 )

  • Recycler View (ListView的加強版,適合數據量大的List展示)

由于后面的三個CoordinatorLayout、CollapsingToolbar以及RecyclerView相對來說會有些復雜,所有我們后面會留專門的篇幅來講,感興趣的同學可以自己先研究起來或者關注后面的博客~

AppBarLayout + Tab Layout?

TabLayout可以說是一個非常好用的視圖,你幾乎在每一個主流的APP里面都可以看到。我們用Support Library實現起來就非常的方便,下面是這幾個組件的結構,ViewPager與AppBarLayout同級。

  

這里不太想給大家展示太多關于UI層的代碼,如果感興趣的同學可以直接到我的GitHub里面去下載。我們主要看一下C#如何在ViewPager里面放視圖同時與TabLayout關聯起來。只需要3步:

  • 找到tab和view控件

  • 通過TabAdapter給ViewPager設置視圖

  • 將ViewPager綁定到tab

  • var tabs = FindViewById<TabLayout>(Resource.Id.tabs);
    var viewPager = FindViewById<ViewPager>(Resource.Id.viewpager);SetUpViewPager(viewPager); tabs.SetupWithViewPager(viewPager);

    SetUpViewPager方法如下:

    private void SetUpViewPager(ViewPager viewPager) { ? ?var adapter = new TabAdapter(SupportFragmentManager);adapter.AddFragment(new Fragment1(), "Fragment 1");adapter.AddFragment(new Fragment2(), "Fragment 2");adapter.AddFragment(new Fragment3(), "Fragment 3");viewPager.Adapter = adapter; }

    是不是很簡單?

    DrawerLayout + NavigationView?

    圖3中的左側菜單,主流APP必備,也是只要幾行代碼就可以了。

      

    在NavigationView的使用上,有兩個屬性需要注意一下。一個左側菜單分為兩部份:headerLayout和menu。

      

    <android.support.design.widget.NavigationView ? ? ? ?android:id="@+id/nav_view"android:layout_height="match_parent"android:layout_width="325dp"android:layout_gravity="start"android:fitsSystemWindows="true"app:headerLayout="@layout/nav_header"app:menu="@menu/drawer_view" />

    所以我們需要有另外兩個文件nav_header和drawer_view來配合一起完成這個菜單視圖。

      

      nav_header其實很簡單用了一個<ImageView>來顯示圖片,以及一個<TextView>來顯示上面圖里面的UserName。我們可以看一下app:menu="@menu/drawer_view"的drawer_view是如何構建成菜單項的。

    <?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><group android:checkableBehavior="single"><item ? ? ? ?android:id="@+id/nav_home"android:icon="@drawable/ic_dashboard"android:title="Home" /><item ? ? ? ?android:id="@+id/nav_messages"android:icon="@drawable/ic_event"android:title="Messages" /><item ? ? ? ?android:id="@+id/nav_friends"android:icon="@drawable/ic_headset"android:title="Friends" /><item ? ? ? ?android:id="@+id/nav_discussion"android:icon="@drawable/ic_forum"android:title="Discussion" /></group><item android:title="Sub items"><menu><item ? ? ? ? ?android:icon="@drawable/ic_dashboard"android:title="Sub item 1" /><item ? ? ? ? ?android:icon="@drawable/ic_forum"android:title="Sub item 2" /></menu></item></menu>

      實現一個這樣的菜單只需要5分鐘就搞定了~

    控件與事件綁定

    在VS操縱UI組件是一件非常簡單的事。找到這個控件,接下來一切都變得簡單,和之前的winform以及webform幾乎是沒有兩樣。

    protected override void OnCreate(Bundle bundle){ ? ? ? ? ?
    ??
    base.OnCreate(bundle); ? ? ?
    ? ? ?
    // Set our view from the "main" layout resource ? ? ? ? ? ?SetContentView(Resource.Layout.Main); ? ? ? ?
    ? ? ?
    var btnSelectDate = FindViewById<Button>(Resource.Id.btnDateSelector); ? ? ? ? ? ?// 事件綁定匿名函數btnSelectDate.Click += (o, e) =>{ ? ? ? ? ? ?
    var dialog = Fragments.DatePickerFragment.NewInstance();dialog.OnDateSelected += Dialog_OnDateSelected; // 事件綁定另一個方法dialog.Show(FragmentManager, "tag");};} ? ? ?

    ? ? ? ?
    private void Dialog_OnDateSelected(DateTime dt){ ? ? ? ?
    ?? ?
    var txtDate = FindViewById<TextView>(Resource.Id.txtDate);txtDate.Text = dt.ToLongDateString();}


    在上面的代碼中我們找到了 btnSelectDate的代碼,然后綁定了它的Click事件來打開一個選擇日期的Dialog。這里的事件處理我們用的是一個匿名方法。

    而在這個Dialog的OnDateSelected事件我們則綁定了一個聲明方法。注:OnDateSelected這個事件是我們自己聲明的,而這個聲明方法,相信大家不會覺得陌生。

    DatePickerFragment.cs中用委托來聲明事件,當然你也可以用傳遞Action的方式來解決。public delegate void DateSelectedHandle(DateTime dt); ? ? ? ?
    public event DateSelectedHandle OnDateSelected; ?
    ?
    ? ??
    public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){ ? ? ? ?
    ? ?
    var selectedDate = new DateTime(year, monthOfYear + 1, dayO ?fMonth); ? ? ? ? ?
    ? ??
    if (OnDateSelected != null){OnDateSelected(selectedDate);}}


    這就是100%的C#代碼。

    Activity 之間數據傳遞

    ? Android中Layout與Activity大家可以理解為webform中的.aspx頁面與.aspx.cs code behind。 只是在Activity中我們還需要手動通過FindViewById來找到這個UI組件。如果Activity代表了一整個View,那我們來看看在不同的View之間如何傳遞數據。

    var context = view.Context; // CheeseDetailActivity是我們要跳轉過去的Activityvar intent = new Intent(context, typeof(CheeseDetailActivity)); // 將數據Put到Extra中即可 EXTRA_NAME為這個數據的keyintent.PutExtra(CheeseDetailActivity.EXTRA_NAME, values[position]); context.StartActivity(intent);

    在CheeseDetailActivity中,只需要通過Intent.GetStringExtra(); 來獲取即可

    string cheeseName = Intent.GetStringExtra(EXTRA_NAME);

    多線程

    其實這里的多線程本不需要被提起,我只是為了向大家展示一下,這種線程處理也是100%C#來寫。畢竟,越小的差異對于我們來說學習成本就越小。只是這里要注意一下,如果在非主線程中要操作UI,則需要調用RunOnUiThread(這名字起的也是好。。)

    void signUpDialog_mOnSignUpComplete(object sender, OnSignUpEventArgs e){mProgressBar.Visibility = ViewStates.Visible;Task.Run(() =>{Thread.Sleep(3000);RunOnUiThread(() => { mProgressBar.Visibility = ViewStates.Invisible; });});}


    小結?

       在這個盛行全干的時代,我想每個人都應該懂移動端開發。Xamarin為我們提供了一種簡單、高效的方式來開發強大的、如原生般體驗的APP。結合C#優雅的語法和宇宙最強大的IDE,這個事情也許值得一試。

    ? ? ??

    相關文章:?

    • C#使用Xamarin開發可移植移動應用(1.入門與Xamarin.Forms頁面),附源碼

    • .NET Standard@Xamarin.Forms

    • C#使用Xamarin開發可移植移動應用(2.Xamarin.Forms布局,本篇很長,注意)附源碼

    • C#使用Xamarin開發可移植移動應用(3.Xamarin.Views控件)附源碼

    • C#使用Xamarin開發可移植移動應用(4.進階篇MVVM雙向綁定和命令綁定)附源碼

    • C#使用Xamarin開發可移植移動應用(5.進階篇顯示彈出窗口與通訊中心)附源碼

    • C#使用Xamarin開發可移植移動應用進階篇(6.使用渲染器針對單個平臺自定義控件),附源碼

    • C#使用Xamarin開發可移植移動應用進階篇(7.使用布局渲染器,修改默認布局),附源碼

    • C#使用Xamarin開發可移植移動應用進階篇(8.打包生成安卓APK并精簡大小),附源碼

    • C#使用Xamarin開發可移植移動應用進階篇(9.混淆代碼,防止反編譯)

    原文地址:http://www.cnblogs.com/jesse2013/p/start-to-develop-with-xamarin.html


    .NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

    總結

    以上是生活随笔為你收集整理的是时候开始用C#快速开发移动应用了的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。