Android成长的故事——由HelloWorld看Android结构

本文从Android的HelloWorld项目入手,详细分析了Android项目的目录结构,包括src、AndroidManifest.xml、res文件夹及其子目录的作用。重点讨论了R.java文件的生成、布局文件(如LinearLayout和TextView)的配置以及AndroidManifest.xml中应用配置和Activity定义的重要性。
摘要由CSDN通过智能技术生成

       貌似程序员的学每一门新的语言都是由“HelloWorld”开始的,这一点确实伤不起啊,然而,从第一个程序,总能看到这门语言最基本的构成,今天就从“HelloWorld”说起,去探究一下Android开发的目录结构

        先建立一个HelloWorld项目,不用添加任何代码,就可以在Android的虚拟机中运行,在虚拟机的屏幕上就可以显示“Hello World, HelloWorldActivity!”,这是因为在Android的项目创建的时候,会默认的在string.xml中写如这句代码,下面我们来分析一下Android的目录结构:

打开“HelloWorld”项的包,可以看见如下目录结构:


. src文件夹里的是源文件

. Android2.1是引用的类库,这些和java 都是一样的;

. gen里面的类就是 ADT 自动生成的,一般只有一个 R.java 文件,是不能修改的,R.java 就是根据资源文件夹 res 生成的 ,R.java 里放的就是 res 中资源文件索引,用一个常量标记 res 中的一个资源文件,便于我们在代码中引用。  
. res 文件夹,这下面又有几种类别,其中 drawable 是放图片的,有 drawable-hdpi,drawable-ldpi,drawable-mdpi 之分,对应的是三种分辨率下的图片,如果你要使用一个图片,你根据分辨率的不同做三种相同的图片分别放到这三个文件夹里,那么你的应用运行在不同分辨率机器上的时候,就会根据该机器的分辨率自动选择合适的图片。
. Layout 中放的就是布局文件了,Android 支持通过xml 生成视图,这样视图就和逻辑控制的代码分离了便于管理。
. Values 中放的就是我们常用的字符串,颜色值,数组等 。
其实资源文件还有多种,这里生成的HelloWorld 结构中没有,比如动画,菜单等。
. AndroidManifest.xml 是一个重要的文件,每个Android 项目都有一个,这是Android 的配置文件,可以在这里配置应用的属性,定义Activity ,声明使用的权限等等。

.default.properties ,项目环境信息,一般是不需要修改此文件

二、Android 项目文件的具体讲解
1.首先看这个 HelloWorld 类。 

代码如下:

public class HelloWorld extends Activity {   
       
    @Override   
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
    }   
}   

他继承了 Activity ,用于展示一屏的内容,所以所有要展示内容的屏幕都要继承Activity 才能实现,接着覆盖了onCreate() 方法对该Activity 进行初始化 setContentView(R.layout. main );设置了使用main.xml 这个布局文件作为当前Activity 的内容展示。

 .main.xml 就是放在 res 下, layout 下面的文件 xml 布局文件 ,可以直接使用 R.layout.main 进行直接的引用他,只要把这个 xml 文件的索引给 Android ,它会自动的找到它并使用 。
2. main.xml 布局文件

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/testString" />
</LinearLayout>

布局文件的内容不多 , 开始就是一个LinearLayout 组件的定义,然后在这个LinearLayout 放了一个用于显示文字的TextView。现在来看一下几个参数:

. LinearLayout一个线性布局面板,只能垂直和水平布局,android:orientation="vertical" 代表里面的子元素只能垂直排列,而使用android:orientation="horizontal" 就标识里面的子元素水平排列。
. android:layout_width 定义当前视图占的宽度,这里是fill_parent 即为充满整个屏幕。而设置成wrap_content 会根据当前视图的大小只能的改变宽度
. android:layout_height 是定义视图的高度,这里也是填充整个屏幕。而设置成wrap_content 会根据当前视图的大小只能的改变高度。
. android:text 是这是TextView 要显示的文本,可以是字符串,也可以是一个字符串的引用,这里是一个引用,引用的是strings.xml 定义好的名字为hello 的字符串

3.AndroidManifest.xml的介绍

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.itcast.life"     <!-- 当前应用所在包 -->
      android:versionCode="1"      <!--指定应用的版本号 。 如果应用需要不断升级 , 在升级的时候应该修该值-->
      android:versionName="1.0">   <!--是版本名称,名称的取定可根据爱好而定 -->
	  <!-- 	@:次标记可以理解为读取R.java中的资源	  -->
	  <!--  android:icon:应用程序的图标	android:label属性用来设定应用的名称	  -->
    <application android:icon="@drawable/icon" android:label="@string/app_name">
	<!-- 用以描述一个activity
		.MainActivity中的“.”意思是当前包路径下的MainActivity,此时可以省略
		必须是上面package中所生明的路径,或其下面的子路径
		如果是多级路径,“.”不能省略,如.sub.MainActivity
	-->
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
			<!-- 意图过滤器:android系统读取此信息
				下面的信息用以声明当前应用的启动activity,它会被系统显示在程序菜单栏中 ,
				如果是其它意图,可以修改为别的内容
			-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
	<!-- 另外两个activity -->
		<activity android:name=".OtherActivity" />
		<activity android:name=".ThreeActivity" android:theme="@android:style/Theme.Dialog"/>
    </application>
<uses-sdk android:minSdkVersion="8" />
</manifest>

这是项目的重要配置文件,诸如 Activity ,权限, Intent等都在这里配置

Package:定义了该应用的包。

android:versioCode定义了应用的版本号

android:versionName定义了应用的版本名字

application标签定义了一个应用,一个项目最多有一个Application 标签。

android:icon="@drawable/icon"定义了应用的图标 引用资源文件中的 icon 图片

android:label="@string/app_name"定义了应用的名称

activity标签定义了一个Activity ,你的每一个Activity 必须在这里定义,否则不能运行.

Android:name定义了Activity 的类名, 这里的.HelloWorld 是以上面的Package 定义为基础的,也就是Package(com.flysnow)加上这个android:name(.HelloWorld) 要能定位到这个Activity(com.flysnow.HelloWorld) ,否则就是找不到 。

android:label定义了该Activity 的标题

intent-filter定义一个 Intent过滤器,用于标记对应的Activity ,以便Android 系统能找到该Activity ,定义的是隐性的Intent,主要使用两个子标签action 和category 来区分每个Intent 。最后的<uses-sdk android:minSdkVersion="10" /> 就是定义应用的最低 SDK 的级别,Android2.3.3,那么版本等级是“10”。

 

2011年12月6日

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值