Android项⽬基本结构详解
⼀、简介
第3章虽然通过百度地图应⽤展⽰了你可能感兴趣的内容,但是,如果你是⼀个初学者,⼀开始就看懂和理解代码可能会⾮常费劲。为了解决此问题,从这⼀章开始,本模块将从最基本的内容讲起,带你逐步进⼊⽤C#进⾏Android应⽤开发的乐园。
⼆、AndroidApp⼊⼝
要⽤C#开发Android应⽤程序,⾸先需要对项⽬的基本结构有⼀个感性认识。如下图所⽰:
Android应⽤程序使⽤的是单⼀⼊⼝,源程序中并不能⼀眼看出程序从哪开始运⾏,当应⽤程序加载到内存中时,Android操作系统会⾃动从内部⾃定义的⼊⼝处开始运⾏该应⽤程序。这种独特的架构可让程序员设计的代码直接和Android操作系统交互,但其缺点也很明显:即使⼀个⾮常简单的程序,也会变得很复杂。
为了⽅便到程序⼊⼝点,当新建⼀个Android项⽬时,默认情况下,在MainActivity.cs⽂件的特性声明中通过“MainLauncher = true”表⽰程序从这个Activity开始执⾏:
[Activity(Label = "myDemos", MainLauncher = true)]
public class MainActivity : Activity
{
//……
android 应用开发}
注意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⽂件中的值可定义多个资源⽽不是只能定义单个资源,例如:
(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>
例如:
复制代码代码如下:
SetContentView(Resource.Layout.Main);EditText phoneNumberText = FindViewById<EditText>
(Resource.Id.PhoneNumberText);
(2)⽅式2--在xml(或者axml)布局⽂件中引⽤资源
格式:@[<PackageName>:]<ResourceType>/<ResourceName>
例如(见Main.axml⽂件):
复制代码代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="schemas.android/ap
k/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/myImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/flag" /></LinearLayout>
5、其他备⽤的资源⽂件夹
备⽤资源也是保存在Resources⽂件夹下,⼦⽂件夹的格式为:
<ResourceType>-<Qualifier>
即:<;资源类型>-<;限定标识符>
例如:drawable-hdpi
当有多个限定符时,各限定符之间⽤短划线分隔。
限定符必须按下表列出的顺序出现(该表实际是按优先级从⾼到低排列):
例如,v11的⽬标是API level 11 (Android 3.0)设备。
下⾯是截图表格中各限定符的含义。
MCC、MNC
⼿机的国家码(MCC):⼿机的SIM卡提供商。
移动⽹络码(MNC):⼿机连接到的⽹络供应商。
尽管本地化⽬标可以使⽤⽤于移动设备的国家码,但是仍建议使⽤资源限定符来限定它。例如:美国(U.S)的资源限定符是mcc310-mnc026
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论