全部博文(436)
分类: WINDOWS
2010-10-15 00:08:14
在搭建完Android的系统平台之后,我们来到了探索之旅的第二站——了解Android架构及界面功能实现。
Android作为移动设备的开发平台,其软件层次结构包括了一个操作系统,中间件和应用程序。Android平台由应用程序、应用程序框架、Android运行时、库以及linux内核共5部分组成,如下图所示:
(1) Android平台的核心应用程序
Android的发布时会协同一些应用程序发布,诸如Home、联系人、电话、浏览器等等,这些应用程序都是以java程序语言编写,也可以用自己编写的程序来替代。
(2) 应用程序框架
该应用程序架构是为简化元件重用而设计,应用程序可以发布它的功能块并可以被其他任何应用程序所使用,使用者用同样的机制来置换元件。
(3) 系统库
Android 包含一组系统元件使用的C/C++函数库,使用者透过应用程序框架使用这些功能。部分函数库如下:
(4) Android运行时
Android运行时由核心库和Dalvik虚拟机两部分组成。每一个Android应用程序执行独立的Dalvik虚拟机。
(5) Linux内核
一) 为了更清楚各个部分的命名,做了如下试验,工程文件的配置如下:
Project name 设置为project name
Application name 设置为applicationname
Package name 设置为 packagename.cn
Create Activity 设置为createactivity
这样设置的目的在于跟踪各个配置的去向。
由上图可见Package name分属于src和gen文件之下,分别包含createactivity.java文件和R.java文件。R.Java文件下文会对其内容作出讲解,而createactivity.java文件是用户自己创建的文件,它是Activity的Activity子类,用户可以在其中添加或修改代码。另外我们创建的applicationname文件可以在模拟器视图中找到。如下图所示:
同样用户所创建的新的activity子类名称也会出现在新的应用程序之中。
二) 对相关组件的了解
(1) AndroidManifest文件
AndroidManifest.xml是每个Android程序中所必需的,它位于Android工程的根目录中,描述了package中的全局数据,包括package中的组件(Activities、Services等)以及他们各自的实现类,各种能被处理的数据和启动位置等。Manifest文件的主要功能是声明应用程序的组件。
例如:一个Activity必须要有一个
<activity android:name=".createactivity"
android:label="@string/app_name">
上述两个语句就是Activity声明。Name属性指定了实现这个Activity的Activity子类。Label属性值指向此Activity要展示给用户的标签资源。
注意事项:几乎所有的AndroidManifest.xml文件都会在其第一个元素中包含一个命名空间的声明xmlns:android=。该声明使标准Android属性在文件中可用,这些属性为文件中的xml元素提供了大部分数据。
(2) Res文件夹
Res文件夹包含的是整个应用可以使用的资源,它包含3个子文件夹,分别为drawable、layout和values。
Drawable文件夹包括本应用所需的图片文件和所需图片文件的引用。
Layout文件夹下目前仅仅有一个xml文件(main.xml),再编写应用界面的布局时引用此文件的内容。根据应用程序的需要还可以在layout中加入各种view。
Values文件夹下存储了一个xml文件(srings.xml),这个文件的作用是存储本工程使用的string类型全局变量。
(3) Assets文件夹
用来存放音频、视频等多媒体资源文件。我们希望能在以后对它有更多的了解。
(4) Src和gen文件夹
这两个文件夹中包含了工程的所有java代码资源,至少要包含2个文件,一个是activity的java 文件,另一个是R.java文件。R.java是Android-Eclipse自动生成的。这个文件包含了drawable、layout、values文件夹中的资源信息,以资源id的形式具体展现。我们不能对它进行修改。
关于界面设计的方法有两种,一种是代码设计,另一种是xml文件设计。
1、显示文本
(1) xml文件设计。
setContentView(R.layout.main);方法表示我们选择了res/layout/main.xlm这个配置文件所表示的界面布局。接下来完善main.xml文件。
为了使手机屏幕上现实“你好”,改动为
其显示结果为:
(2) 使用代码
对helloworld.java进行如下修改:
其显示结果为:
2、文本框及按钮的显示之一
(1)相关程序
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
设置文本区,第一行用于输入的文本框
<EditText
android:layout_width="fill_parent" 设置宽度和高度 android:layout_height="wrap_content"
/>
<LinearLayout
xmlns:android=""
android:orientation="horizontal" 设置摆放方式为水平
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right">设置对齐方式为右对齐
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定" 为按钮设置名称,屏幕上的确定按钮
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"为按钮设置名称,屏幕上的取消按钮
/>
LinearLayout>
<EditText
android:text="请输入姓名学号,以#键结束"设置EditText现实的内容
android:id="@+id/EditText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">EditText>
LinearLayout>
(2)运行结果
3、文本框及按钮的显示之二
(1)相关程序
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="身高(cm)"
/> 文字检视
<EditText android:id="@+id/height"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:numeric="integer" 仅允许输入整数数字
android:text="" 指定EditText 界面元件预设显示的文字(数字)。
/> 编辑文字
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="体重(kg)"
/>
<EditText android:id="@+id/weight"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:numeric="integer"
android:text=""
/>
<Button android:id="@+id/submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="计算BMI 值"
/>
<TextView android:id="@+id/result"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
<TextView android:id="@+id/suggest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
LinearLayout>
(2)运行结果
4、例子三
(1) 程序说明
此程序的功能是在界面上显示“欢迎来到Android的世界...”
(2) 程序
import android.app.Activity;
import android.os.Bundle;
/*必须引用widget.TextView才能在程序里声明TextView对象*/
import android.widget.TextView;
public class wg extends Activity
{ /*必须引用widget.TextView才能在程序里声明TextView对象*/
private TextView mTextView01;
public void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
/* 载入main.xml Layout,此时myTextView01:text为str_1 */
setContentView(R.layout.main);
/* 使用findViewBtId函数,利用ID找到该TextView对象 */
mTextView01 = (TextView) findViewById(R.id.myTextView01);
String str_2 = "欢迎来到Android的世界...";
mTextView01.setText(str_2);
}
}
android:id="@+id/widget35"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android=""
>
android:id="@+id/myTextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/str_1"
android:layout_x="61px"
android:layout_y="69px"
>
>
(1) Android的命名规则:在新建项目的时候要有很多的命名,刚刚了解Android并不了解这些名称都是给什么文件的,所以在工程创建的时候总是报错。
解决办法:在重新搭建环境,加载ADT多次后偶然发现的命名规则,报名中不能含有数字和下划线,更改工程的各个名称之后,成功的创建了工程。
(2) 项目名称的具体含义
在创建项目的时候填写了好多名字,系统自动生成了很多文件,不知道每个名字所代表的含义和文件的作用。
解决办法:通过反复创建程序,更改命名的方式,记录每个文件的变化,找到每个名称所对应的文件,以及每个文件的意思。
(3) 界面搭建:在搭建界面的时候,不能更该界面上组建的属性。
解决办法:在拖拽界面放入组建,在系统自动生成main.xml文件中的代码中进行更改,通过语句控制组建的布局,例如:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定" 为按钮设置名称,屏幕上的确定按钮
/>
(1) 没有找到在拖拽布局模式下更改组建属性及布局的方法,不知道是不是能指通过一种方式布局。
(2) 组建的Id不能够更改,不知道Id的具体含义以及更改的办法。
android:id="@+id/EditText01"
(3) 对于什么时候需要在.java文件中进行编码什么时候在.xml中进行编码的问题。
我们在小实验中发现,对于界面的布局问题可以在java类中进行更改,可是对于什么时候修改xml文件,什么时候更改java类没有一个很好的概念,都是凭着感觉在做,下一阶段,通过具体的实例,我们准备更加深刻的体会编码的过程以及编码的一般习惯。
在这个阶段,我们主要是学习了界面的搭建和实验了很多小程序,大家对编程有了一个初步的了解,下一阶段,我们小组制定的任务是实现较大的有实际意义的程序。首先,我们是准备阅读上一届同学的飞向月球的程序,通过阅读和阅读代码来深入理解Android的编程。然后我们准备实践所找资料中的较大工程,通过阅读别人的程序扩展自己的思路,制定我们小组要完成的任务。在这个阶段,我们要求小组每个人都实现一个较大工程任务,在程序中添加注释,在本阶段末,小组讨论,交流经验和收获,汇总代码,用以保证小组每个成员都能阅读几个较大工程,亲自实践一个大工程。
在这个阶段我们跟踪分析了Android 项目中各个文件的去向和对项目中各个组建的了解。特别是对Res文件夹和Src文件夹的分析,我们知道了Res文件夹包含的是整个应用可以使用的资源,它包含3个子文件夹,分别为drawable、layout和values。而Drawable文件夹包括本应用所需的图片文件和所需图片文件的引用;Layout文件夹下的main.xml是应用界面的布局时引用此文件的内容;Values文件夹下存储了一个xml文件(srings.xml),这个文件的作用是存储本工程使用的string类型全局变量。Src文件夹中包含activity的java 文件和R.java文件。R.java是Android-Eclipse自动生成的。这个文件包含了drawable、layout、values文件夹中的资源信息,以资源id的形式具体展现。另外我们也实现了一些界面的操作。
——李玲
在第二阶段我按照书上的例题开始尝试着实现简单的功能,我先从人机界面开始入手,我想载入“欢迎来到Android的世界...”。要想实现这个功能需要在Layout中创建TextView对象,并定义res/values/strings.xml里的字符串常数。主程序以setText方法,输出String类型的字符串变量,最后通过TextView的setText方法,在预加载程序之初,更改TextView文字。载入main.xml Layout,时myTextView01 text为str_1 。通过使用findViewBtId函数,利用ID找到该TextView对象。我还进行了扩展学习,TextView里的setText方法支持以下多态构造方法:
public final void setText(CharSequence text)
public final void setText(int resid)
public void setText(CharSequence text, TextView.BufferType type)
public final void setText(int resid, TextView.BufferType type)
public final void setText(char[] text, int start, int len)
在实验的过程中我遇到了一些问题,程序开始的时候报错,无法解析R.id,2个快速修正可用,在类型R中创建字段id,或在类型R中创建常量id。
——陈卓
通过阅读相关书籍,第二个阶段我了解Android的系统构架、基本组件以及对界面有了一些练习。读第一遍书时,发现很多东西不明白。第二次读时,结合了Android的平台,便清晰了许多。通过学习小组中其他同学找到的资料,进入到Android界面的学习。尝试了在xml和java两种文件中进行修改以达到同一个效果,虽然例子很简单,但是,觉得与第一阶段相比有了进步。小组中其他同学进行的界面搭建,自己也进行了学习。
——陈艳玲
继上周成功搭建Android平台之后,为了能在eclipse编程环境下使用JAVA语言编写Android应用程序,我利用了一个下午的时间熟悉了eclipse编程环境,并练习使用JAVA语言编写程序。
在这些基础上,我在Google Android平台建立了一个工程文件,并且加入自己的代码,生成了一个小程序,这是一个简单的计算器小程序,可以实现常用的加减乘除运算。目前,我感到的最大困难就是实现具体的功能。因为具体的参数使用和函数的调用还不熟悉,前面提到的计算器,也是参考成熟的源代码而实现的。
Android 有强大的界面元件,在http://developer.android.com/guide/tutorials/ views/index.html这个网站上,有各种界面元件列表,相当丰富。下一步是打算多熟悉一下界面元件,争取让自己设计的界面丰富一些。
另外,虽然目前对eclipse环境下的java 编程有了一定的掌握,但还是不够熟练,感觉对于编写更加复杂的系统还是有些力不从心,还要在这方面多花些时间。
——吴雄飞
第二阶段,我主要负责的工作是Android小开发实例的实验。在这个阶段,我们阅读了小程序的代码,学会搭建基本的界面。相较上一个阶段,这个阶段的进行明显速度变慢了很多,也遇到了好多问题。建立项目是在第一阶段搭建的环境里,首先是我的环境不能现实,刚开始我以为是加载ADT失败的原因,从新加载了很多次ADT,后来发现每次都是失败。每次失败后都要重启Eclipse才能继续加载,重启后仍然报错,后来发现是项目建立错误。不过通过这个,我认为Eclipse加载ADT是只能一次的,第二次安装就会报错。在建立运行小工程的时候我们发现了Android特殊的命名规则,包名中不能有数字,下划线,而项目名称和程序名则没有相应的规则,例如包名不能为An_text.,另外Creat Activity出的命名会出现在模拟器上。另外我阅读了相关书籍上的布局搭建,发现java的布局还是有很大差别的,Andriod的布局搭建有两种方式,一种是拖拽界面,一种是编写xml文件。但是在项目中没有找到建立新xml文件的地方,布局搭建采用的是更改main.xml的方法。另外在拖拽的时候没有更改组建属性的方法,只能通过系统自动生成的xml文件来更改,例如:
更改上面的属性只能通过代码来实现
——付佳丽
在这一阶段中我不仅了解到创建工程时的一些命名规则,还从网上找到了一些实际应用的简单例子,根据这些例子进行实际操作,观看了结果后,对代码的结构进行了分析并在此基础上尝试着对代码进行简单的修改,实现了显示字符串功能。除此之外,我还尝试着在res/layout/main.xml下的layout中拖拽一些东西到面板下,了解到它们实体的样子,并学会对AutoCompleteTextView和Button等的一些相关设置。这一阶段我也遇到了一些问题,xml文件中的id总是修改不成功,一旦修改就会报错,接下来我要先把这个问题弄明白。
——陈艳艳
chinaunix网友2011-01-01 15:08:38
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com