Thursday, March 31, 2011

Android工程的组织结构

本文介绍一个十分简单的Android工程的组织,由java语言编写。

这个例子是为了说明如何在没有任何Android开发基础的前提下强行开始工程的研发,适合于有一定其他类的较大项目开发经验,但基本首次接触Android的研发人员。

 

以下为这个Android工程的组织结构,其中比较重要的地方都已经展开了。

clip_image001

src目录下的test1.java为主要源程序,如果工程比较复杂也可以有多个源程序文件。gen目录下的R.java为一个自动生成的java代码文件,主要用来标记界面上各个元素的情况,一般来说开发者不需要修改这个文件。

res\layout目录下的main.xml为主界面,res\values目录下的strings.xml保存了一些字串常量,一般情况下无需修改名字,也可以在主要源程序代码中指定。

在res目录下还保存了程序的图标,图片资源等,管理起来都比较简单,本例中也不讨论这些地方。

 

下面是这个简单例子的界面,比较随意,只为说明问题。

左面为控件库,可以直接用来拖动设计界面,如需要复杂的排版效果,可以直接编辑xml文件。该文件中同时保存了每个控件的id名。例如这里的第一个按钮的对应部分为:

<Button

    android:text="Button123"

    android:id="@+id/button1"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center_horizontal" >

    </Button>

 

本例包含几个基本的控件,即一个字串,两个按钮,一个单行文本编辑框。一般的说,如果觉得这些控件不够美观可以自己画图,再为图片编写事件,大部分情况可以糊弄着用。

image

 

以下为源码文件的内容,注释中将详细说明哪些是非常重要的,哪些是必须手动添加的。

 

package com.test1; 

// 指定的程序名称,在创建工程时由开发者填写

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

// 显示专用库

import android.view.View.OnClickListener;

// 处理点击事件的专用库

import android.widget.Button;

// 按钮专用库

import android.widget.TextView;

// 字串label的专用库

import android.widget.EditText;

// 编辑框的专用库

// 在添加控件时,以上代码并不会被自动加入,需要手动添加

// import相当于C#usingDelphiuses

 

public class test1 extends Activity {

    // 与文件名相同的类

 

    private Button mBtn1, mBtn2;

    private TextView mText;

    private EditText e3; 

    // 定义具体的对象,与主界面中对应,对象名任意起即可

    /** Called when the activity is first created. **/

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 以上两行均为自动生成,可以理解为程序入口,通常不要修改

        // (关于程序入口的定位Google的解析非常糊涂,初学者基本看不懂,可以就当是这里)

        setContentView(R.layout.main);

        // 选择一个xml的定义作为主要界面,即指定main.xml

        mBtn1 = (Button) findViewById(R.id.button1);

        mText = (TextView) findViewById(R.id.Text1);

        mBtn2 = (Button) findViewById(R.id.button2);

        e3 = (EditText) findViewById(R.id.editText1);

        // 需手动用findViewById将控件与具体对象关联

 

        mBtn1.setOnClickListener(new OnClickListener() {

            // 为第一个按钮的点击设置监听

            public void onClick(View v)

            // 本行可认为是固定写法

            {

                mBtn2.setText(e3.getText());

            };

            // 具体的内容可以直接写在这部分

        });

        mBtn2.setOnClickListener(new View.OnClickListener() {

            // View.OnClickListener与不写View是一样的,但是输入View.

            // 之后可在弹出的列表中直接选择OnClickListener

            // 下面一行也会自动生成

            public void onClick(View v) {

                // TODO Auto-generated method stub

                onTTTT();

                // 具体的内容也可以写在后面单独的函数

            }

        });

        // 以上内容需在OnCreate过程中写完

 

    }

 

    public void onTTTT() {

        mBtn2.setText(mText.getText());

 

    }

 

}