前言

不同於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
2  
3 {
4  
5 protected override void OnCreate (Bundle bundle) {
6  
7 base.OnCreate (bundle);
8  
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的宣告如下, 請微調部份屬性:

01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
02  
03 android:orientation="vertical"
04  
05 android:layout_width="fill_parent"
06  
07 android:layout_height="fill_parent">
08  
09 <TextView
10  
11 android:textAppearance="?android:attr/textAppearanceMedium"
12  
13 android:layout_width="fill_parent"
14  
15 android:layout_height="wrap_content"
16  
17 android:id="@+id/textView1" />
18  
19 <ToggleButton
20  
21 android:layout_width="fill_parent"
22  
23 android:layout_height="wrap_content"
24  
25 android:id="@+id/toggleButton1"
26  
27 android:textOn="開"
28  
29 android:textOff="關"
30  
31 android:layout_marginBottom="6.7dp" />
32  
33 <Switch
34  
35 android:layout_width="fill_parent"
36  
37 android:layout_height="wrap_content"
38  
39 android:textOn="開"
40  
41 android:textOff="關"
42  
43 android:id="@+id/Switch1"
44  
45 android:layout_marginRight="225.3dp" />
46  
47 </LinearLayout>

 

2. 開啟SwitchToggleScreen.cs. 並撰寫以下程式碼.

01 //載入頁面
02  
03 SetContentView(Resource.Layout.SwitchToggle);
04  
05 //宣告並取得控制項實體
06  
07 ToggleButton toggle = FindViewById<ToggleButton>(Resource.Id.toggleButton1);
08  
09 Switch _switch = FindViewById<Switch>(Resource.Id.Switch1);
10  
11 TextView msg = FindViewById<TextView>(Resource.Id.textView1);
12  
13 //處理Toggle Button的Click事件, 並將狀態顯示在TextView
14  
15 toggle.Click+= (sender, e) => {
16  
17 if (toggle.Checked) {
18  
19 msg.Text = "目前Toggle Button的狀態是\"開\"";}
20  
21 else{
22  
23 msg.Text = "目前Toggle Button的狀態是\"關\"";};};
24  
25 //處理Switch的Click事件, 並將狀態顯示在TextView
26  
27 _switch.Click += (sender, e) => {
28  
29 if (_switch.Checked) {
30  
31 msg.Text = "目前Switch Button的狀態是\"開\"";}
32  
33 else{
34  
35 msg.Text = "目前Switch Button的狀態是\"關\"";};};

Toggle Button及Switch 控制項的操作幾乎完全相同, 主要就是處理控制項的click事件並判斷目前的開關狀況.

3. 執行專案並檢視執行結果.

Seek Bar

1. 開啟seekBar.axml並從工具箱拖放TextView及SeekBar控制項進螢幕

 

介面宣告的xml如下:

01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
02  
03 android:orientation="vertical"
04  
05 android:layout_width="fill_parent"
06  
07 android:layout_height="fill_parent">
08  
09 <TextView
10  
11 android:textAppearance="?android:attr/textAppearanceMedium"
12  
13 android:layout_width="fill_parent"
14  
15 android:layout_height="wrap_content"
16  
17 android:id="@+id/textView1" />
18  
19 <SeekBar
20  
21 android:layout_width="fill_parent"
22  
23 android:layout_height="wrap_content"
24  
25 android:id="@+id/seekBar1"
26  
27 android:layout_marginTop="48.0dp" />
28  
29 </LinearLayout>

2. 開啟SeekBarScreen.cs並在OnCreate事件中撰寫以下程式碼:

01 //載入頁面
02  
03 SetContentView(Resource.Layout.SeekBar);
04  
05 //宣告並取得頁面上的控制項
06  
07 var msg = FindViewById<TextView>(Resource.Id.textView1);
08  
09 var seekbar = FindViewById<SeekBar>(Resource.Id.seekBar1);
10  
11 //將seekBar的最大值設定為100
12  
13 seekbar.Max = 100;
14  
15 //處理SeekBar的ProgressChanged事件, 並將目前的大小(進度)透過TextView呈現
16  
17 seekbar.ProgressChanged += (sender, e) => {
18  
19 msg.Text = string.Format("目前Seekbar的大小為{0}", seekbar.Progress.ToString());
20  
21 };

SeekBar的操作非常的直覺. 您只需要處理SeekBar控制項的ProgressChanged事件即可.

3. 執行專案並檢視執行結果.

結語

Android 的開發方式, 與先前介紹的iOS略有不同. iOS透過Outlet及Action將View及Controller進行連結. 而Android 則是透過Parser, 為頁面上的控制項建立id屬性, 讓Activity可以透過FindViewById方式建立控制項的物件實體, 接下來的處理方式就與iOS或Windows Form在操作控制項的方式類似. 在下一篇教學文章中, 將說明Android應用程式的多頁面處理.

Visual Studio 跨平台開發實戰(4) - Xamarin Android 基本控制項介紹 (转帖)的更多相关文章

  1. Visual Studio 跨平台開發實戰(2) - Xamarin.iOS 基本控制項介紹 (转帖)

    前言 在上一篇文章中, 我們介紹了Xamarin 以及簡單的HelloWorld範例, 這次我們針對iOS的專案目錄架構以及基本控制項進行說明. 包含UIButton,, UISlider, UISw ...

  2. Visual Studio 跨平台開發實戰(5) - Xamarin Android 多頁面應用程式開發 (转帖)

    前言 大部份的Android 都具有實體或虛擬的Back鍵. 因此在處理多頁面應用程式時, 與先前所介紹的iOS Navigation controller 比較起來會簡單許多. 1. 開啟Visua ...

  3. Visual Studio 跨平台開發實戰(3) - Xamarin iOS 多頁面應用程式開發 (转帖)

    前言 在前一篇教學中, 我們學會如何使用Visual Studio 搭配Xcode 進行iOS基本控制項的操作. 但都是屬於單一畫面的應用程式. 這次我們要來練習如何透過Navigation Cont ...

  4. Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)

    前言 應用程式發展的腳步, 從來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年相當盛行的行動裝置應用程式(Mobile Application), 身為C# ...

  5. Visual Studio跨平台开发Xamarin

    台湾微软的一系列Visual Studio跨平台开发Xamarin的资料,上面还有视频.具体参看 http://www.microsoft.com/taiwan/newsletter/library/ ...

  6. RTX的api開發實例

    RTX的api開發實例 最近接觸了RTX的接口開發部份,RTX其实有很多玩法,除了可以用自帶的客戶端發消息之外還可以用PHP調用API的方式來做一些事情,下邊整理了一下分享給大家 值得提醒的是这些接口 ...

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

    原文 Visual Studio跨平台开发实战(5) - Xamarin Android多页面应用程式开发 前言 大部份的Andr​​oid 都具有实体或虚拟的Back键. 因此在处理多页面应用程式时 ...

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

    原文 Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS,Xamarin 在Visual Studio中针对Android,可以直接设 ...

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

    原文 Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发 前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode 进行iOS基本控 ...

随机推荐

  1. 超级详细的解决方法 (CentOS7) :永久修改 mysql read-only 问题 could not retrieve transation read-only status server

    一.查看mysql的事物隔离级别 SHOW VARIABLES LIKE '%iso%'; 二.临时修改事物隔离级别 SET GLOBAL tx_isolation='READ-COMMITTED'; ...

  2. UVa 1606 Amphiphilic Carbon Molecules (扫描法+极角排序)

    题意:平面上有 n 个点,每个点不是黑的就是白的,现在要放一个隔板,把它们分成两部分,使得一侧的白点数加上另一侧的黑点数最多. 析:这个题很容易想到的就是暴力,不妨假设隔板至少经过两个点,即使不经过也 ...

  3. 续安装好composer和workerman之后;TP5运行workerman的操作

    TP5想要实现时时通讯:首先先安装好composer和workerman,我之前有写一篇安装的方法,在cmd里面安装:tp5手册上面有写cmd命令的代码:接下来是安装好后如何运行的: 首先在项目中建立 ...

  4. checkbox数据回显问题

    一.问题 在用复选框的时候,最常用的无非就是全选,全不选,数据回显等问题!要做的比较灵活!最近做项目的时候,就遇到这些问题,下面从js和JQueyr两方面解决一下全选,全不选,数据回显的问题. 二.H ...

  5. (深搜)棋盘问题 -- poj -- 1321

    链接: http://poj.org/problem?id=1321 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2889 ...

  6. BTrace追踪Hadoop部署

    Hadoop集成BTrace 1.BTrace 1.1BTrace部署 1.下载BTrace工具包,官网地址:https://kenai.com/projects/btrace/downloads/d ...

  7. CodeForces - 589F —(二分+贪心)

    A gourmet came into the banquet hall, where the cooks suggested n dishes for guests. The gourmet kno ...

  8. How To Use XDOLoader to Manage, Download and Upload Files? (DOC ID 469585.1)

    In this Document Goal Fix     Downloading Files   Uploading Files References Applies to: BI Publishe ...

  9. HTML5、CSS3与响应式Web设计入门(1)

    HTML5与CSS3已经当仁不让的成为了这两年Web界最火爆的词,他们似乎在HTML4和CSS2统治了Web很多年之后的某一天突然爆发,然 后一直占据着所有Web开发者的视野.HTML5本身就是一个很 ...

  10. [Elixir002]节点启动后自动连接其它节点

    问题: 如何指定一个节点在启动后自动连接到别的节点上? 这个我们要使用到sys.config,这是erlang的配置文件,这个文件一般都是$ROOT/releases/Vsn下 1. 首先我们要先启动 ...