【51CTO外电头条】和Android平台移动应用程序非常类似,Windows Phone 7(WP7)应用程序也是用托管语言编写的,Android使用Java,Windows Phone 7使用C#,各自都提供了丰富的开发库,Java和C#之间的许多差异都与样式有关,它们都和C/C++有着千丝万缕的联系,因此它俩也有很多相似之处。
.NET/Windows Phone 7和Java/Android Api之间虽有很多不同点,但两者的相似点让你在移植应用程序时不需要费太大的力气。
平台差异
在深入了解转换或创建Windows Phone 7应用程序相关的工具和过程之前,我们先简单介绍一下Windows Phone 7和Android各自使用的术语和技术。Windows Phone 7***个重大的不同点是,应用程序是用C#编写的托管.NET程序集,平台支持两种类型的应用程序:Silverlight和XNA游戏。
大多数Windows Phone 7应用程序都是用Silverlight创建的,通过常见的控件,如标签、文本框和列表等,提供典型的基于表单的用户交互,Android Layout和Activity与Silverlight中的Page类似。
Windows Phone 7还支持XNA,它允许用户创建2D和3D游戏,它们分别等同于Android SurfaceView和GLSurfaceView的2D和3D模式,但和Android不同的是,XNA游戏使用的是Direct3D,因此更容易将PC和Xbox 360游戏移植到手机上,而Android使用的是OpenGL。
页面(Page)和导航(Navigation)
Silverlight Page实际上是一个XML文件,它和Android Layout类似,XML定义一个Page时是使用XAML(可扩展应用程序标记语言)创建的,XAML和Android Layout类似,但它支持更多的功能,XAML允许开发人员在Page内执行操作,包括Animations和Data Binding等,从此不再需要为这些功能编写代码。
Android Layout和Activity是松耦合的,你需要自己编写代码,以便和Activity内的UI元素连接起来,对给定的Page来说,C#代码是和它捆绑到一起的,因此不需要编写UI附属元素,平台会自动为对象创建相关的“线路”,为Page和UI创建相关的事件,这样可以预防在Task onCreate方法中经常出现的混乱。
这两个平台另一个重要的不同之处是导航,在Android中,你可以通过创建一个Intent从一个任务切换到另一个任务,它和Windows Phone 7中的Navigation功能相同,Navigation允许你在Page之间移动,和Android Intent类似,你可以向你要导航的Page传递数据,Windows Phone 7中的Page和ASP.NET中的Page有某些属性是相似的。
将Layout转换成Page
在深入了解代码之前,我们先来看看Android Layout XML如何向Windows Phone 7 XAML Page转换,在Windows Phone 7免费工具箱中,最耀眼的莫过于XAML设计工具,Visual Studio® 2010中的XAML设计器只适合初级开发人员,它只能对Page做一些基本的控制,Expression Blend®则是专业化的工具,需要改造UI时,你应该使用它,和Android Layout一样,你也可以使用文本编辑器直接编辑XAML文件,因为实际上它是一个XML文件。
Windows Phone 7 Page提供了Android Layout类似的布局能力,下表列出了它支持的布局属性和Android对应的属性。
Windows Phone 7 |
Android |
Canvas |
AbsoluteLayout |
Grid |
GridView |
ScrollView |
ScrollView |
StackPanel |
LinearLayout |
正如你所看到的,Windows Phone 7提供了和Android几乎相同的布局能力,下表列出了Windows Phone 7的基本控件和Android的同等控件。
Windows Phone 7 |
Android |
TextBlock |
TextView |
TextBox |
EditText |
Button |
Button |
CheckBox |
CheckBox |
RadioButton |
RadioButton |
Image |
ImageView |
ProgressBar |
ProgressBar |
ListBox |
ListView |
Map |
MapView |
WebBrowser |
WebView |
你应该注意到Windows Phone 7的基本控件和Layout类型能够一一对应,但也有些特殊的Layout和控件无法对应起来,其原因在于XAML的强大,通过XAML,我们可以在一个控件中嵌入另一个控件,这意味着你不用创建复杂的控件,这一切都可以在你的应用程序中创建和自定义。
#p#
应用程序存储
对大多数移动应用程序而言,数据的存储是一件大事,对Windows Phone 7来说,***的办法是选择云服务作为数据存储的主要手段,你可能会感到很奇怪,但如果你是为你的网站开发一个前端程序,你就会明白了。如果你不是做的这种开发,你有两种数据存储方法:使用商业云存储服务,如Windows Azure云存储,或使用本地IsolatedStorage接口,IsolatedStorage允许你为应用程序存储文件。
Windows Phone 7应用程序允许你访问本地数据,但它目前并没有提供内置的数据库API,如SQLServer精简版或SQLite,如果你现在的Android应用程序使用的是SQLite存储数据,你需要提出一个替代方案,在写这篇文章的时候,在Codeplex上有几个开源项目为IsolatedStorage接口增加了数据库存储功能。
根据你应用程序的数据存储需要,不需要数据库API,也许就能将数据存储在本地,例如,如果你在构建一个RSS/ Podcast应用程序,你可以把RSS种子就保存在XML文件中,当你需要访问数据时,你只需要载入数据,使用LINQ获取特定的数据即可。
在RSS应用程序示例中,我们可以使用RSS种子的原始XML文件,也可以使用LINQ to XML创建XDocument存储下面这样的记录:
- //Create XML
- XDocument doc = new XDocument();
- doc.Add(new XElement("DataRoot",
- new XElement("Record",
- new XElement("value","data1")),
- new XElement("Record",
- new XElement("value","data2"))
- ));
- <DataRoot>
- <Record>
- <value>data1value>
- Record>
- <Record>
- <value>data2value>
- Record>
- DataRoot>
为了将这个XML隔离存储,我们使用IsolatedStorageFile和IsolatedStorageFileStream,如:
- //Save the XML
- using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
- {
- using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
- {
- doc.Save(file);
- file.Close();
- }
- }
正如你所看到的,隔离存储XML数据是如此的简单,读取XML和使用LINQ to XML查询结果的的代码如下:
- //Load the XML
- using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
- {
- using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
- {
- XDocument d = XDocument.Load(file);
- var query = from r in d.Root.Elements("Record")
- select r;
- //Process the list of record
- }
- }
虽然上面的例子非常简单,它也说明了即使没有数据库,在手机上存储数据是多么容易,这些代码还可以进一步扩展,存储更复杂的数据。
Windows Phone 7支持存储应用程序设置和用户偏好设置,在Android中,它叫做Shared Preferences,支持存储Key/Value类型的信息,在Windows Phone 7中,它叫做Local Settings,通过IsolatedStorage接口可以访问它们,同样,信息访问也是通过Key/Value的格式进行的。
开发工具
作为一名Android开发人员,你可能对开源开发工具情有独钟,使用Eclipse作为Android应用程序开发IDE无疑是大多数人的选择,但Android Development Toolkit(ADT)缺乏许多必要的工具,如适合的布局工具,虽然ADT带有布局工具,但不够强大,很多时候,我们不得不手写XML。
相比之下,微软平台可供选择的工具就要多得多,现在在create.msdn.com上提供的工具有:
◆Microsoft Visual Studio 2010 Express for Phone
◆Microsoft Expression Blend for Phone
◆Microsoft XNA Game Studio for Phone
这三个工具允许你免费使用,Microsoft Visual Studio 2010 Express for Phone是主要的Windows Phone 7应用程序集成开发环境,它包括了所有必需的工具,如Page布局工具,C#编译器,Windows Phone 7模拟器等。
Microsoft Expression Blend for Phone主要是针对专业设计人员的,设计人员可以使用它从零开始创建Page。
Microsoft XNA Game Studio for Phone则是为2D和3D游戏开发准备的,它包括了XNA框架,以及处理游戏音效和图像需要的工具。
小结
Windows Phone 7给智能手机操作系统市场注入了新的活力,它基于成熟的技术,如Silverlight,WPF,C#等,正如本文介绍的,Android和Windows Phone 7之间的差异主要集中在表面上,Android开发人员要转向Windows Phone 7开发并不是什么难事。
51CTO题外话
前段日子诺基亚与微软结盟,未来诺基亚的主推智能手机平台将为Windows Phone平台,对诺基亚和微软来讲都将是一个双赢的局面,而对Windows Phone平台的开发者来讲有诺基亚这样的手机厂商支持,开发Windows Phone应用将更加“钱途”。到目前为止,Android平台比Windows Phone平台的开发者要多得多,希望本文能够给Android开发者一个启迪。
原文出处:http://www.devx.com/VS_2010/
原文名:Windows Phone 7 Development for Android Developers
作者:Chris Bennett
【51CTO译稿,非经授权谢绝转载,合作媒体转载请注明原文出处、作者及51CTO译稿和译者!】
【编辑推荐】
- 诺基亚微软联盟 智能手机市场三分天下?
- Windows Phone 7 免费线下培训火热报名中
- 诺基亚向开发者赠送E7及Windows Phone 7手机
- 钱景无限 Android应用开发者晒收入
- Android开发者:开发难度高 用户不愿付费
- iPhone vs Android 拥戴者的奇特世界观
- Windows Phone开发工具下载地址
- Windows Phone开发工具修正版下载地址