Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发

原文 Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发

前言

大部份的Andr??oid 都具有实体或虚拟的Back键. 因此在处理多页面应用程式时, 与先前所介绍的iOS Navigation controller 比较起来会简单许多.

1. 开启Visual Studio 并新增Android Application 专案并命名为Lab4-MultiScreen

 

2. 在Layout资料夹中新增Second.axml

 

在Second.axml 中拖放1个TextView并标示此为第2个Activity

 

2. 在专案底下新增一个SecondActivity.cs. 在OnCreate事件中撰写以下程式码:

1 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">SetContentView(Resource.Layout.Second);</span> SetContentView(Resource.Layout.Second);</span>

3. 开启Activity1.cs, 在class name的地方按滑鼠右键=>重构=>重新命名. 将类别名称改为FirstActivity. 记得在方案总管中的档名也一并改为FirstActivity.cs

 

4. 开启Main.axml, 在画面中放置1个Button并指定Text属性值为”Load Second Activity”并将id 的属性值变更为”@+id/ShowSecond”

5. 开启FirstActivity.cs, 在OnCreate事件中撰写以下程式码:

1 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//載入頁面SetContentView(Resource.Layout.Main);</span> //载入页面SetContentView(Resource.Layout.Main);</span>
2  
3 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//宣告並取得按鈕物件, 並在按鈕的click事件處理中載入SecondActivity</span> //宣告并取得按钮物件, 并在按钮的click事件处理中载入SecondActivity</span>
4  
5 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">Button button = FindViewById< Button >(Resource.Id.showSecond);</span> Button button = FindViewById< Button >(Resource.Id.showSecond);</span>
6  
7 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">button.Click += delegate</span> button.Click += delegate</span>
8  
9 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">{…….按鈕處理函式}</span> {…….按钮处理函式}</span>

Button的click处理函式中, 我们将使用3种方法来载入SecondActivity.

  • 方法一: 使用内建的StartActivity方法, 程式码如下:
1 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//呼叫其他Activity的第一種方法(隱含的建立Intent)</span> //呼叫其他Activity的第一种方法(隐含的建立Intent)</span>
2  
3 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">StartActivity(typeof(SecondActivity));</span> StartActivity(typeof(SecondActivity));</span>
  • 方法二: 建立Intent, 然后使用StartActivity载入其他SecondActivity. 程式码如下:
1 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//呼叫其他Activity的第二種方法, 建立Intent, 然後使用StartActivity載入其他Activity</span> //呼叫其他Activity的第二种方法, 建立Intent, 然后使用StartActivity载入其他Activity</span>
2  
3 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">var second = new Intent(thistypeof(SecondActivity));</span> var second = new Intent(thistypeof(SecondActivity));</span>
4  
5 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">StartActivity(second);</span> StartActivity(second);</span>
  • 方法三: 建立Intent, 并透过Intent.PutExtra载入Activity并传??入参数. 程式码如下:
1 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//使用Intent.PutExtra載入Activity並傳入參數var second = new Intent(this, typeof(SecondActivity));</span> //使用Intent.PutExtra载入Activity并传??入参数var second = new Intent(this, typeof(SecondActivity));</span>
2  
3 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">second.PutExtra("FirstData""Data from FirstActivity");</span> second.PutExtra("FirstData""Data from FirstActivity");</span>
4  
5 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">StartActivity(second);</span> StartActivity(second);</span>

上述的3种方式, 第1个跟第2个是一样的, 使用第1种方式, 会隐含建立一个Intent物件。

6. 执行专案并检视结果.

7. 透过上述的第3个方法, 可以像QueryString般传递参数到下一个Activity. 现在我们开启SecondActivity.cs. 透过Intent的GetStringExtra方法来取得参数的值. 在Oncreate方法中撰写以下程式码:

1 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//載入頁面SetContentView(Resource.Layout.Second);</span> //载入页面SetContentView(Resource.Layout.Second);</span>
2  
3 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//宣告並取得TextView物件var label = FindViewById</span> //宣告并取得TextView物件var label = FindViewById</span> <textview> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" >(Resource.Id.screen2Label);</span> (Resource.Id.screen2Label);</span>
4  
5 <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">//透過Intent.GetStringExtra取得從前一個Activity所傳來的訊息label.Text = Intent.GetStringExtra("FirstData") ?? "Data not available";</span> //透过Intent.GetStringExtra取得从前一个Activity所传来的讯息label.Text = Intent.GetStringExtra("FirstData") ?? "Data not available";</span> </textview>

在上述程式码中, 我们透过Intent的GetStringExtra(“参数名称”)来取得字串型别的参数. 事实上还可以透过类似的方法取得不同型别的参数值. 如下图所示:

而??陈述式则是用来判断是否为Null的方便写法. 若取出的值为Null则显示后面的字串.

8. 执行专案并检视结果, 如下图所示

结语

在本篇文章中, 我们介绍Android 应用程式在多页面中的切换, 相较于iOS, Android 对于多页面的处理较为方便. 另外在Android中也提供Tab控制项在多页面之间进行切换. 有兴趣的朋友可以参考以下文章:

Tab Layout

http://docs.xamarin.com/guides/android/user_interface/tab_layout

范例程式码下载: Lab04-MultiScreen.zip

本文同时刊载于昕力资讯网站,转载请注明出处!

时间: 2024-10-01 02:41:30

Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发的相关文章

Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发

原文 Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发 前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode 进行iOS基本控制项的操作. 但都是属于单一画面的应用程式. 这次我们要来练习如何透过Navigation Controller来建立多页面的iOS应用程式. 设定专案及画面 1. 开启Xamarin Studio 并建立新专案, 专案类型为iOS=>iPhone=>空白专案, 专案名称为02-Navigatio

isual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍

原文 isual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS, Xamarin 在Visual Studio中针对Android, 可以直接设计使用者介面. 在本篇教学文章中, 笔者会针对Android的专案目录结构以及基本控制项进行介绍, 包含TextView, EditView, Toggle/ Switch以及Seekbar控制项. Android专案目录结构 在Visual Studio建立Android 应用程式专案后, ??

Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍

原文 Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍 前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iOS的专案目录架构以及基本控制项进行说明. 包含UIButton,, UISlider, UISwitch, UIImage以及UIWebView控制项. iOS的使用者介面描述档, 其副档名为.xib, 目前在Visual Studio尚未支援直接编辑. 因此在文章中, 我们会先用Xamarin S

Visual Studio跨平台开发实战(1) - Hello Xamarin!

原文 Visual Studio跨平台开发实战(1) - Hello Xamarin! 前言 应用程式发展的脚步, 从来没有停过. 从早期的Windows 应用程式, 到网路时代的web 应用程式, 再到近几年相当盛行的行动装置应用程式(Mobile Application), 身为C#的开发人员与Visual Studio的使用者. Windows Phone与Windows Store App的开发是否已满足不了你了呢? 如果能够让你使用C#及Visual Studio 来开发iOS及And

Visual Studio跨平台开发(2):Xamarin.iOS基本控制项介绍

前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iOS的专案目录架构以及基本控制项进行说明. 包含UIButton,UISlider,UISwitch, UIImage以及UIWebView控制项. iOS的使用者界面描述文档, 其副文档名为.xib, 目前在Visual Studio尚未支持直接编辑. 因此在文章中, 我们会先用Xamarin Studio建立专案, 并使用XCode中的Interface Builder布置我们所需的控制项后

Visual Studio跨平台开发(1):Hello Xamarin!

前言 应用程序发展的脚步, 从来没有停过. 从早期的Windows 应用程序, 到网络时代的web 应用程序, 再到近几年相当盛行的行动装置应用程序(Mobile Application), 身为C#的开发人员与Visual Studio的使用者. Windows Phone与Windows Store App的开发是否已满足不了你了呢? 如果能夠让你使用C#及Visual Studio 来开发iOS及Android的app. 是否能再度唤醒你的开发魂? Xamain 正是为了这样的需求而诞生的

Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios )

本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mono和Xamarin的关系,以及整个搭建环境的过程. 一.Mono和Xamarin介绍 1.Mono简介 Mono 是一个由Novell 公司主持的项目.该项目的目标是创建一系列符合ECMA 标准(Ecma-334 和Ecma-335)的.NET 工具,包括C# 编译器和共通语言执行平台.与微软的.NET Framework 不同,Mono 项目不仅可以运行于Windows 系统上,还可以运行于Linux,Fr

Unity3D-RPG项目实战(3):整合Visual Studio 2013开发环境

古人云:工欲善其事必先利其器,IDE虽然属于一个非常上层的工具,但是一个好的IDE对工作效率提高还是很大的. 其实我还是满想用一下官方推荐的Mono,毕竟跨平台现在还是很重要的一个特性.尝试了这1周,作为一个从VC5就开始抱MS大腿的老屌丝程序员,实在怀念Visual Studio.话说还是Visual Studio的代码编辑器好用啊. 另外,今天看到消息称,开发Unity的VS整合工具的SyntaxTree已经被微软收购了,UnityVS以后都免费啦,哈哈.今天试了一把,还是满好的.:) 详见

Mac上使用Visual Studio Code开发/调试.NET Core代码

Mac上使用Visual Studio Code开发/调试.NET Core代码 .Net Core 1.0终于发布了,Core的一大卖点就是跨平台.这个跨平台不只是跨平台运行,而且可以跨平台开发.今天抽空研究了下在Mac下如何使用VS Code来开发.NET Core程序,并且调试代码. 1.安装.NET Core 在mac上打开终端: ~$ brew update ~$ brew install openssl ~$ brew link --force openssl 如果不能使用brew命