前言
不同於iOS, Xamarin 在Visual Studio中針對Android, 可以直接設計使用者介面. 在本篇教學文章中, 筆者會針對Android的專案目錄結構以及基本控制項進行介紹, 包含TextView, EditView, Toggle/ Switch以及Seekbar控制項.
Android 專案目錄結構
在Visual Studio建立Android 應用程式專案後, 在方案總管中會看到如下圖的目錄結構:

Assets: 放置在Assets資料夾中的檔案, 將會一起被封裝進Android的封裝檔中(建置動作要設定為"AndroidAsset"). 之後便可以透過如下的陳述式來存取Assets的資源。
1 |
public class ReadAsset : Activity |
5 |
protected override void OnCreate (Bundle bundle) { |
7 |
base.OnCreate (bundle); |
9 |
InputStream input = Assets.Open ("my_asset.txt");}} |
Resources:包含Drawable, Layout以及Values資料夾. Drawable用來放置圖片. 依照裝置的解析度不同, 還可以新增drawable-hdpi, drawable-mdpi, drawable-ldpi等資料夾來存放不同解析度的檔案. Layout資料夾則是存放使用者介面檔(副檔名為.axml). 而Value資料夾則是可以存放不同型別的XML對應檔, 例如styles.xml, colors.xml… 針對Resources底下的檔案, 建置動作請設定為”AndroidResource”
若您開啟預設的Main.axml, 會看到如同底下的XML描述

- LinearLayout: 主要的頁面框架, 以垂直或水平的方式排列頁面上的物件, 相當於Silverlight 中的stack panel
- @+id/[物件名稱]: 告訴Android parser, 為物件建立一個resource id
- @string/[名稱]: 在String.xml中建立一個字串資源, 後續可供Resource類別存取.
上述的@string則會對應到資料夾Resources\Values\String.xml

- 名稱Hello對應到UI中Button的Text屬性
- 名稱ApplicationName對應到專案屬性中的應用程式名稱
- 名稱Hello2為自行定義的字串資源.
有了以上的基本概念後, 接下來我們來介紹Android的基本控制項。
TextView
1. 開啟Lab03-BasicControls 專案並開啟Layout資料夾下的TextView.axml

2. 從左邊的工具列將TextView拖放到畫面中, 雙擊TextView並編輯文字

3. 接著拖拉一個TextView, 並在右邊的屬性視窗設定textcolor為#2A3748, textsize為24dip

4. 再拖拉一個TextView並輸入文字, 包含一個超連結. 在屬性中將autolink的屬性值改為web.

結果如下:連結文字會自動變成超連結.

5. 最後拖拉一個TextView並輸入文字, 包含超過5位數的數字, 在屬性中將autolink的屬性值改為phone

結果如下: 數字被更改為超連結

6. 開啟TextViewScreen.cs 並在OnCreate 事件中載入Layout中的TextView
SetContentView(Resource.Layout.TextView);
7. 執行專案並檢視及操作有連結的TextView內容.
EditText
1. 開啟Layout資料夾下的EditText.axml
2. 從工具箱中拖拉1個Text(Small)及1個Plain Text物件到畫面上並編輯Text的文字如下:

將屬性中的autoText設為true

3. 拖拉一組Text及Plain Text物件到畫面上並編輯Text的文字如下:

將屬性中的capitalize設為words.

4. 拖拉一組Text及password物件到畫面上並編輯Text的文字如下:

5. 開啟EditTextScreen.cs 並在OnCreate 事件中載入Layout中的TextView
SetContentView(Resource.Layout.EditText);
6. 執行專案, 在第一個欄位輸入錯的單字, 將會出現拚字錯誤及建議視窗.

7. 其他欄位效果如下:

Switch / Toggle button
Switch跟Toggle其實是很相似的控制項, 都是控制開和關的選項, 但顯示的方式有所不同. 我們在同一個練習中使用這2個控制項. (註: Switch控制項是在Android 4.0(API14)後才有, 因此在工具箱中找不到此控制項, 必須在XML中自行輸入. 此外, 您的模擬器也必須是Android 4.0以上才能執行)
1. 開啟SwitchToggle.axml. 在畫面上依序部署1個TextView, 用來顯示訊息, 1個ToggleButton以及1個Switch控制項. 如下圖所示:

Axml的宣告如下, 請微調部份屬性:
03 |
android:orientation="vertical" |
05 |
android:layout_width="fill_parent" |
07 |
android:layout_height="fill_parent"> |
11 |
android:textAppearance="?android:attr/textAppearanceMedium" |
13 |
android:layout_width="fill_parent" |
15 |
android:layout_height="wrap_content" |
17 |
android:id="@+id/textView1" /> |
21 |
android:layout_width="fill_parent" |
23 |
android:layout_height="wrap_content" |
25 |
android:id="@+id/toggleButton1" |
31 |
android:layout_marginBottom="6.7dp" /> |
35 |
android:layout_width="fill_parent" |
37 |
android:layout_height="wrap_content" |
43 |
android:id="@+id/Switch1" |
45 |
android:layout_marginRight="225.3dp" /> |
2. 開啟SwitchToggleScreen.cs. 並撰寫以下程式碼.
03 |
SetContentView(Resource.Layout.SwitchToggle); |
07 |
ToggleButton toggle = FindViewById<ToggleButton>(Resource.Id.toggleButton1); |
09 |
Switch _switch = FindViewById<Switch>(Resource.Id.Switch1); |
11 |
TextView msg = FindViewById<TextView>(Resource.Id.textView1); |
13 |
//處理Toggle Button的Click事件, 並將狀態顯示在TextView |
15 |
toggle.Click+= (sender, e) => { |
19 |
msg.Text = "目前Toggle Button的狀態是\"開\"";} |
23 |
msg.Text = "目前Toggle Button的狀態是\"關\"";};}; |
25 |
//處理Switch的Click事件, 並將狀態顯示在TextView |
27 |
_switch.Click += (sender, e) => { |
29 |
if (_switch.Checked) { |
31 |
msg.Text = "目前Switch Button的狀態是\"開\"";} |
35 |
msg.Text = "目前Switch Button的狀態是\"關\"";};}; |
Toggle Button及Switch 控制項的操作幾乎完全相同, 主要就是處理控制項的click事件並判斷目前的開關狀況.
3. 執行專案並檢視執行結果.
Seek Bar
1. 開啟seekBar.axml並從工具箱拖放TextView及SeekBar控制項進螢幕

介面宣告的xml如下:
03 |
android:orientation="vertical" |
05 |
android:layout_width="fill_parent" |
07 |
android:layout_height="fill_parent"> |
11 |
android:textAppearance="?android:attr/textAppearanceMedium" |
13 |
android:layout_width="fill_parent" |
15 |
android:layout_height="wrap_content" |
17 |
android:id="@+id/textView1" /> |
21 |
android:layout_width="fill_parent" |
23 |
android:layout_height="wrap_content" |
25 |
android:id="@+id/seekBar1" |
27 |
android:layout_marginTop="48.0dp" /> |
2. 開啟SeekBarScreen.cs並在OnCreate事件中撰寫以下程式碼:
03 |
SetContentView(Resource.Layout.SeekBar); |
07 |
var msg = FindViewById<TextView>(Resource.Id.textView1); |
09 |
var seekbar = FindViewById<SeekBar>(Resource.Id.seekBar1); |
15 |
//處理SeekBar的ProgressChanged事件, 並將目前的大小(進度)透過TextView呈現 |
17 |
seekbar.ProgressChanged += (sender, e) => { |
19 |
msg.Text = string.Format("目前Seekbar的大小為{0}", seekbar.Progress.ToString()); |
SeekBar的操作非常的直覺. 您只需要處理SeekBar控制項的ProgressChanged事件即可.
3. 執行專案並檢視執行結果.

結語
Android 的開發方式, 與先前介紹的iOS略有不同. iOS透過Outlet及Action將View及Controller進行連結. 而Android 則是透過Parser, 為頁面上的控制項建立id屬性, 讓Activity可以透過FindViewById方式建立控制項的物件實體, 接下來的處理方式就與iOS或Windows Form在操作控制項的方式類似. 在下一篇教學文章中, 將說明Android應用程式的多頁面處理.
- Visual Studio 跨平台開發實戰(2) - Xamarin.iOS 基本控制項介紹 (转帖)
前言 在上一篇文章中, 我們介紹了Xamarin 以及簡單的HelloWorld範例, 這次我們針對iOS的專案目錄架構以及基本控制項進行說明. 包含UIButton,, UISlider, UISw ...
- Visual Studio 跨平台開發實戰(5) - Xamarin Android 多頁面應用程式開發 (转帖)
前言 大部份的Android 都具有實體或虛擬的Back鍵. 因此在處理多頁面應用程式時, 與先前所介紹的iOS Navigation controller 比較起來會簡單許多. 1. 開啟Visua ...
- Visual Studio 跨平台開發實戰(3) - Xamarin iOS 多頁面應用程式開發 (转帖)
前言 在前一篇教學中, 我們學會如何使用Visual Studio 搭配Xcode 進行iOS基本控制項的操作. 但都是屬於單一畫面的應用程式. 這次我們要來練習如何透過Navigation Cont ...
- Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)
前言 應用程式發展的腳步, 從來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年相當盛行的行動裝置應用程式(Mobile Application), 身為C# ...
- Visual Studio跨平台开发Xamarin
台湾微软的一系列Visual Studio跨平台开发Xamarin的资料,上面还有视频.具体参看 http://www.microsoft.com/taiwan/newsletter/library/ ...
- RTX的api開發實例
RTX的api開發實例 最近接觸了RTX的接口開發部份,RTX其实有很多玩法,除了可以用自帶的客戶端發消息之外還可以用PHP調用API的方式來做一些事情,下邊整理了一下分享給大家 值得提醒的是这些接口 ...
- Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发
原文 Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发 前言 大部份的Android 都具有实体或虚拟的Back键. 因此在处理多页面应用程式时 ...
- Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍
原文 Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS,Xamarin 在Visual Studio中针对Android,可以直接设 ...
- Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发
原文 Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发 前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode 进行iOS基本控 ...
随机推荐
- [在职软件工程]基于CMMI的软件工程教程
第1章 软件工程基础 1.1软件工程基本原理 a.按照软件生命周期的阶段划分制定计划,严格依据计划进行管理 项目概要计划,里程碑计划,项目控制计划,产品控制计划,验证计划,运行维护计划 b.坚持进行阶 ...
- windows平台使用spark-submit以client方式提交spark应用到standalone集群
1.spark应用打包,我喜欢打带依赖的,这样省事. 2.使用spark-submit.bat 提交应用,代码如下: for /f "tokens=1,2 delims==" %% ...
- .NET基础 (21)ASP NET应用开发
ASP.NET中的WebForm相关的内容其实有点儿过时了,但在很多的老项目中还是WebForm的,这些都是遗留问题,新上的项目基本上都用MVC了,在微软最新的 ASP.NET 的版本中已经默认使用M ...
- VS中的Debug 和 Release 编译方式的本质区别
VS中的Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使 ...
- Vivado安装教程
Vivado的各个版本的安流程其实都差不多,本教程用Vivado2016.4为例进行安装,同样适用于之前和之后的各个版本. 下载好安装包后打开,双击xsetup.exe运行安装程序 弹出的窗口,提示现 ...
- Objective-C 学习笔记(二) 函数
Objective-C 函数 定义一个方法 在Objective-C编程的方法定义的一般形式如下: - (return_type) method_name:( argumentType1 )argum ...
- 使用Fiddler代理调试本地手机页面
从事前端开发的同学一定对 Fiddler 不陌生,它是一个非常强大的http(s)协议分析工具.我们知道如何在电脑上调试页面请求,但在手机端你没有这么多强大好用的调试工具来调试你的webapp,如果你 ...
- isset()、empty()、is_NULL()的区别
1,isset():变量不存在,或变量为null,返回false,否则返回true: 2,empty():变量不存在,或变量为null,返回true,另外"".0."0& ...
- robot framework学习笔记之七—连接mysql数据库
1.安装Database-Library 输入命令:pip install robotframework_databaselibrary 2.添加Database的Library 3.实例 * ...
- Metasploit渗透某高校域服务器
本文作者:i 春秋签约作家——shuteer 前期准备:1. 使用Veil生成免杀PAYLOAD: 2. 有一个外网IP的服务器,安装好metasploit,方便操作. 一.SHELL反弹meterp ...