Xamarin新建项目的类型选择

关键词:

      最近有空就把Xamarin的默认项目打开看了看,写一个Xamain学习系列。前期准备:环境搭建:这里。首先新建一个默认的Xamarin单元提纲项目,里面有一些Xamarin的示例代码,建立的过程有几个选项

    之前有一篇文章已经说过关于UI技术的选择,这里重新说一下:使用Xamarin.Forms不同平台共享界面代码(Xaml),如果熟悉wpf,uwp或者愿意学习Xaml选择此项,不同平台共享前端代码。选择本机,每个平台分别写前端代码,和单独开发区别不大,只不过做到了用C#语言开发而已,毫无疑问,使用Xamarin.Froms明显是我们想要的。代码共享策略,这个就区别不是很大了,我的理解是共享项目是通过将Xamarin项目附加到每个平台上进行编译,每个平台项目编译时Xamarin项目都需要跟随编译,可以移植类库使用了微软跨平台框架,Xamarin产生一个Dll文件(类似吧),可以插入各个平台中,我的观点区别不大,但可移植性应该是PCL好一些,选PCL(可能)好一些,但共享项目也不错。

    新建一个Xamarin项目如下图所示:

    首先来理解这个项目,新建的Xamarin共4个项目,一个Xamarin3个分平台,iOS、Android、Win,其中Win平台是通用应用UWP。建立的是XamarinUI的项目,因此Xamarin项目使用Xaml代码编写界面。

   找到程序入口点:Xamarin中并没有发现程序入口点,发现程序入口在分平台之中。比如Android


namespace App2.Droid
{
    [Activity(Label = "@string/app_name", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            LoadApplication(new App());
        }
    }
}


     LoadApplication(new App());这句将任务传递给了Xamarin,因为App是Xamarin建立的类,继承自Application。类如下:


[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace App2
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            SetMainPage();
        }

        public static void SetMainPage()
        {
            Current.MainPage = new TabbedPage
            {
                Children =
                {
                    new NavigationPage(new ItemsPage())
                    {
                        Title = "Browse",
                        
                        Icon = Device.OnPlatform("tab_feed.png",null,null)
                    },
                    new NavigationPage(new AboutPage())
                    {
                        Title = "About",
                        Icon = Device.OnPlatform("tab_about.png",null,null)
                    },
                }
            };
        }
    }
}
     注意,Current.MainPage设置了主界面,或者当前启动界面,关于一点需要说明下面这句代码:



Icon = Device.OnPlatform("tab_feed.png",null,null)
    根据平台不同使用不同的资源,发现这段代码已经过时,新的方法如下:



switch (Device.RuntimePlatform)
{
    case Device.iOS:
        break;
    case Device.Android:
        break;
    case Device.Windows:
        break;
    default:
        break;
}
    虽然长度有所增加,但更直观了,这样分平台就把主任务交给了Xamarin来处理了,而分平台各自的差异性代码如何被Xamarin调度呢?且听下文分解。


作者:songshizhao 发表于:2017-05-11T12:17:05 访问量:1034
评论 [发表评论]