一、簡介
第3章雖然通過百度地圖應用展示了你可能感興趣的內容,但是,如果你是一個初學者,一開始就看懂和理解代碼可能會非常費勁。為了解決此問題,從這一章開始,本模塊將從最基本的內容講起,帶你逐步進入用C#進行Android應用開發的樂園。
二、AndroidApp入口
要用C#開發Android應用程序,首先需要對項目的基本結構有一個感性認識。如下圖所示:
Android應用程序使用的是單一入口,源程序中并不能一眼看出程序從哪開始運行,當應用程序加載到內存中時,Android操作系統會自動從內部自定義的入口處開始運行該應用程序。這種獨特的架構可讓程序員設計的代碼直接和Android操作系統交互,但其缺點也很明顯:即使一個非常簡單的程序,也會變得很復雜。
為了方便找到程序入口點,當新建一個Android項目時,默認情況下,在MainActivity.cs文件的特性聲明中通過“MainLauncher = true”表示程序從這個Activity開始執行:
[Activity(Label = "myDemos", MainLauncher = true)]
public class MainActivity : Activity
{
//……
}
注意MainActivity.cs的前綴,一般表示它控制的是布局文件Main.axml(但不是必須這樣做)。比如,如果把Main.axml改為First.axml,那么它對應的Activity類最好命名為FirstActivity.cs,換言之,前綴只是為了方便查看它和界面的對應關系而已,這僅僅是一種命名習慣,而不是對文件命名的必然要求。
實際上,你可以把“MainLauncher = true”放到任何一個繼承自Activity的類中。總之,你將其放到哪個類的特性聲明中,程序就從哪個Activity開始執行。
三、資源文件(Resources文件夾下的各種文件)
資源文件是指在代碼中使用的并且在編譯時就被打包到應用程序中的附加文件。根據資源的類型,這些文件分別被保存在項目中的不同文件夾下。
在項目的Resources文件夾下,根據資源類型,可將其分為多個子文件夾。這些資源包括圖片,音頻文件,以及任何與程序可見內容相關的東西。例如,自定義的動畫、菜單、風格、顏色以及由.axml文件(帶設計界面)或.xml文件(不帶設計界面)描述的用戶交互頁面的布局等。
1、基本概念
Resources文件夾下保存的資源不包括代碼文件,而是指隨項目一起編譯和打包的除了代碼文件之外的其他文件,如聲音、視頻、圖像、字符串、布局文件等。
將資源單獨組織的優點是:代碼分離,這樣就可以適用于多平臺,同時也能在編譯時進行檢查,并在編譯通過后為鍵入C#代碼提供智能提示。
使用資源可使修改程序的特征變得很容易,同時不必修改代碼。而且通過可選擇的資源集合,能為不同的設備配置優化程序(例如不同的國家語言和不同的屏幕尺寸等)。
系統搭建工具會自動為Android項目使用的每一個資源都定義一個唯一的整型ID,程序通過ID獲得代碼中的資源或者.xml或.axml中的其它資源的引用。例如,程序包含了一個名叫logo.png (保存在 Resources/drawable/ 目錄下)的圖片文件,工具就會生成一個叫做Resource.drawable.logo的資源ID,程序中可以用這個ID引用該圖片。
分隔資源的一個重要能力是為不同的設備配置提供可選擇的資源文件。例如,在XML中定義UI字符串,就可以把這些字符串翻譯成其它的國家語言,并在分隔的文件中分別保存。然后,根據追加到資源目錄名中的國家語言修飾符(例如res/values-fr/是法語字符串的值)和用戶對國家語言的設置,Android系統就會提供適當的國家語言字符串到UI中。
Android支持很多不同的修飾符以支持可選的資源。這些修飾符都是被加入到資源目錄名中的簡短字符串。這樣定義是為了定義設備的特定配置,以保證這個目錄下的資源可能會被使用到。
2、基本的資源文件夾
基本的資源文件夾用于保存項目中常用的資源文件。
(1)Drawable文件夾
Drawable文件夾:保存通用的圖片文件。
Drawable resources(可繪制資源)是編譯到應用程序中的圖像資源,這些資源可通過API去調用或引用其他的XML資源。例如,位圖文件 (.png、.gif、.jpg)、可調整大小的9-Patch格式的圖像、在XML文件中定義的狀態列表、通用的形狀定義、……等。
通過Resources.Drawable獲取該文件夾下的這些文件資源。
說明:9-Patch圖像(*.9.png)的含義及用法見本博客第5章介紹的圖像示例。
(2)其他與分辨率對應的圖片資源文件夾
其他與分辨率對應的相關文件夾還有:
drawable-ldpi文件夾:保存低分辨率手機專用的圖片文件。
drawable-mdpi文件夾:保存中等分辨率手機專用的圖片文件。
drawable-hdpi文件夾:保存高分辨率手機專用的圖片文件。
drawable-xdpi文件夾:保存超高分辨率手機專用的圖片文件。
drawable-xxdpi文件夾:保存超超高分辨率手機專用的圖片文件。
(3)layout文件夾
layout文件夾用于保存所有界面文件(包括帶設計界面的.axml文件和不帶設計界面的.xml文件),如果你高興,可隨時將.xml換名為.axml,或者隨時將.axml換名為.xml。
一般用Main.axml作為默認的App主頁布局文件,有Design和Source兩種模式。
該文件夾下的文件都是可編譯為屏幕布局的XML文件,可通過Resources.Layout獲取這些文件資源,通過Resources.Id獲取這些文件中用id定義的資源。
(4)Values文件夾
Values文件夾存放用字符串描述的XML文件,該文件夾下的這些文件中包含的都是一個或多個簡單的字符串類型的值或列表(strings、integers、colors等)。比如在一個XML文件中用字符串列表定義一系列顏色。
Values文件夾資源文件都是文本資源,在文件夾中有一些約定的文件名稱。另外,該目錄下的XML文件中的值可定義多個資源而不是只能定義單個資源,例如:
String.xml:保存字符串值列表,通過Resources.String獲取這些資源。Colors.xml:保存顏色值列表,通過Resources.Color獲取這些資源。Arrays.xml:定義數組,通過Resources.Array獲取這些資源。Dimens.xml:保存尺度值,通過Resources.Dimens獲取這些資源。
(5)animator文件夾
該文件夾下保存的是用屬性動畫描述對象的動畫的XML文件。其用法和WPF的屬性動畫相似,是一種非常靈活而強大的描述動畫的方式,可描述各種類型的對象。
“屬性動畫”是在API level 11 (Android 3.0)開始提供的。
注:Android的屬性動畫和WPF的屬性動畫的用法非常相似,只要學會其中一種,很快就會另一種的用法。
(6)anim文件夾
該文件夾用于保存描述補間動畫(tween animations)的XML文件。
補間動畫用一系列的動畫指令對視圖對象的內容執行轉換,用于將View對象轉換為動畫,比如邊旋轉邊增大圖像或文本的大小。
由于旋轉圖像或文本會導致占用的容量快速膨脹,因此補間動畫只能用于View對象。
(7)color文件夾
該文件夾用于保存描述顏色狀態列表的XML文件。顏色狀態列表是指用顏色表示每個狀態的變化,比如按鈕按下、禁用等。要讓按鈕的隨著狀態的變化而引起顏色的改變,就需要定義這樣一個顏色狀態列列表,用它來描述這些顏色狀態的變化。
(8)menu文件夾
該文件夾保存的是描述菜單的XML文件,如【應用程序選項】菜單、彈出菜單、上下文菜單(快捷菜單)、子菜單等。
通過Resources.Menu獲取該文件夾下的這些文件資源。
(9)raw文件夾
用原始的二進制形式保存的任意文件。這些文件仍然以二進制文件的形式被編譯到Android應用程序中。
通過Resources.Raw可獲取該文件夾下的這些文件資源。
(10)xml文件夾
該文件夾下保存的XML文件類似于.NET的配置文件,即:該文件夾下保存的都是可以由應用程序在運行時讀取的任意XML文件。
通過Resources.Xml獲取這些資源。
4、引用資源的方式
當將資源文件添加到項目中時,管道會自動將該資源描述添加到資源中,并自動生成對應的類(保存在Resource.designer.cs文件中),自動生成的類會為每個資源自動分配一個唯一的ID。
有兩種存取和管理資源的方式:
-----在C#代碼中引用資源。
-----在.xml或者.axml布局文件中引用資源。
(1)方式1--在C#代碼中引用資源
格式:@[<PackageName>.]Resource.<ResourceType>.<ResourceName>
例如:
(2)方式2--在xml(或者axml)布局文件中引用資源
格式:@[<PackageName>:]<ResourceType>/<ResourceName>
例如(見Main.axml文件):
5、其他備用的資源文件夾
備用資源也是保存在Resources文件夾下,子文件夾的格式為:
<ResourceType>-<Qualifier>
即:<資源類型>-<限定標識符>
例如:drawable-hdpi
當有多個限定符時,各限定符之間用短劃線分隔。
限定符必須按下表列出的順序出現(該表實際是按優先級從高到低排列):



例如,v11的目標是API level 11 (Android 3.0)設備。
下面是截圖表格中各限定符的含義。
MCC、MNC
手機的國家碼(MCC):手機的SIM卡提供商。
移動網絡碼(MNC):手機連接到的網絡供應商。
盡管本地化目標可以使用用于移動設備的國家碼,但是仍建議使用資源限定符來限定它。例如:美國(U.S)的資源限定符是 mcc310-mnc026
MCC的完整編碼詳見下面的網站:http://mcclist.com/
Language
兩字母的ISO 639-1國家語言編碼以及可選的兩字母的ISO-3166-alpha-2區域編碼。 如果同時提供這兩個限定符,用“-r”分隔。
例如:對于French-Canadian locales,使用的資源限定符為:fr-rCA
完整的語言和區域編碼見“Codes for the Representation of Names Of Languages and Country names and code elements”。
Smallest Width
限定屏幕執行時使用的最小寬度。例如:sw320dp 表示目標設備的高和寬最小說320dp。
Available Width、Available Height
Available Width:屏幕最小寬度,格式:w<N>dp,其中N表示與像素無關的寬度。當用戶旋轉屏幕時會改變該值。例如:w720dp 表示目標設備的最小寬度為720dp
Available Height:屏幕最小高度,格式:h<N>dp,其中N表示與像素無關的寬度。當用戶旋轉屏幕時會改變該值。例如:h720dp 表示目標設備的最小高度為720dp
Screen aspect
指屏幕的寬高比,而不是屏幕的放置順序(縱向和橫向)。其值有兩個:long(表示寬屏幕)、notlong(表示非寬屏幕)。
Screen Orientation
屏幕放置順序,Portrait(縱向放置)或者landscape(橫向放置)。該值可在應用程序的生命周期中改變。取值有:port、land
Dock mode
設備在 car dock或者 desk dock 中。API 8(Android 2.2.x)開始提供。取值有:car、desk
Night mode
應用程序是否在夜間模式下運行。此限定可給開發者在應用程序生命周期中提供優化選項。API level 8 (Android 2.2.x)開始提供。
可能的值:night、notnight
Screen pixel density (dpi)
物理屏幕的像素數,通常用dpi表示。可能的值有:
ldpi 主站蜘蛛池模板: 玉林市| 泰顺县| 兴山县| 南陵县| 黑山县| 丰宁| 紫阳县| 上饶县| 定结县| 军事| 土默特左旗| 诸城市| 灵川县| 荣成市| 梅河口市| 清流县| 盖州市| 株洲县| 黄浦区| 同德县| 万载县| 清水县| 平山县| 繁昌县| 通榆县| 云安县| 周至县| 马尔康县| 友谊县| 鄂托克旗| 连江县| 社会| 盐边县| 清丰县| 临猗县| 汨罗市| 加查县| 中西区| 宿州市| 怀宁县| 肇州县|