第一天内容:环境搭建,见: http://www.eoeandroid.com/thread-57677-1-2.html
第二天,最简单的程序
对于没接触过android的人来说,这一步可能有点困难,有点复杂。万事开头难,要做好android,这一步显然是必经之路,必须用心攻克。其实我也没有看的融会贯通,只是从不懂,经过一天研究,渐渐知道了一些其中的关窍。怎么吹嘘自己,都属于七窍通了六窍的。现在,继续分享经验。

一. Application
这是个什么东西,相信大家都耳熟能详。应用程序!
不同于windows,不同意linux,在android中,application的运作模式,至少和我以前所接触到的东西都完全是不一样的。在开发实用的程序之前,理解android运行程序的机制,是非常必要的。

a. 程序包括了:manifest配置文件,编译后的文件(源代码),资源文件。
配置文件用来告诉操作系统,你的程序需要牵涉到哪些组件、如何运行、会不会被自动唤醒等等。
编译后的文件用来让虚拟机在你的应用被唤醒后,装入编码,并且运行。
资源文件包含了各种ui的布局(xml),以及图标、图片,值(xml)

b.程序的运行周期:其实这一点很重要,但是大家不需要知道的太多。一个合法的运行周期,是完全脱离用户的。用户不需要决定什么时候运行一个应用,什么时候结束他。android系统,都会根据代码,根据配置文件来做好这件事情。总体的状态有:

1.运行并且激活 (前台进程)
2.运行没有激活 (可见进程)
3.只在后台运行 (服务进程)
4.挂载 (不可见进程、后台进程)
5.不在进程内。 (空进程)

c. 和其他平台不同,android是个完全可以脱离main函数运行的平台(其实还是有入口的,但是被封装了,通常使用默认activity的onCreate函数作为入口,什么是activity?后文会提到)所以,在oo思想的前提下,application就变成了一个用来保存全局变量、全局资源等等牵涉到整个应用方方面面东西的对象了。也许应该是一个单例,也许里面可以塞一个main函数进去,这一点还没有具体的研究,等以后牵涉到了再说吧。毕竟,饭要一口一口吃。

二.Activity
android的java虚拟机里使用得比较灵魂的一块。整体来说,如果一定要用windows下的东西来描述的话,这就是一个窗口。每个窗口,都对应了一个句柄。在android里面,这个类似句柄的东西,应该就是Intent了。当然,Intent的作用还远远不止句柄,他还起到了windows里面消息传递和通信的作用。这个以后会慢慢深入研究。

a.Activity就是类似窗口的东西。一个应用可以没有activity,也可以有多个activity,全凭自己的意思写。至于没有activity的程序入口在哪里(见上文描述),我自己还没弄明白,会在慢慢的深入中接触到。永远要记得,不能一口气吃成胖子。我研究的肯定不是最快的,但是至少是必须的知识(自我感觉良好,莫怪)。

b.Activity的内容,可以有xml文件是先安排好,也可以在runtime的时候,使用android api来设计。我更倾向于后者,因为,貌似xml设计器并不十分好用。不过初期在还不太熟悉的情况下,用用xml设计器就已经足够了。

三.View
view知识一种称呼。实际上:
a. activity上的一切,都能称作view(就像windows上的一切,都是窗口,一样的性质)
b. view可以使一个控件,如button,也能是一个容器:如linearLayout
c. view可以有id,也可以没有。如果有id,可以通过findViewById这个语句,在运行时获得这个view的实例。
d. view是在存储在一个树形图上的。这一知识点知道一下,也许会有用。

四.开始一个小程序:guess
万事都有起步的一片,我不喜欢hellowworld,因为helloworld涵盖的信息量太少了,根本不能满足正常开发一个程序的需求,更何况,一般都是自动生成的,很容易把自己弄得云里雾里(就如同以前学mfc,弄个helloworld还要包含n个lib,写无数句代码,helloworld出来了,还没弄明白到底为什么去弄这些东西,相信有很多同学有类似的感悟)。
通常,新玩具的第一个产品,我通常是弄一个guess的超愚昧游戏出来。游戏规则很简单,1-100,系统随机抽取一个数字,然后玩家输入数字去猜。无论大小,都要弹出一个对话框给与玩家相应的提示。大了,小了,或者中了,直到玩家猜到正确的数字为止。

1.新建工程,一个android工程,我使用了android2.2的api
观察一下目录结构,有src,gen,android2.2,assets,res,两个文本文件,一个androidmanifest.xml
其中src包含了java源文件
gen是工程自动生成的文件,貌似是用来保存一些全局变量、控件id之类的东西
android2.2是api库文件
assets是资源,需要调用api访问,更类似于文件系统
res是另一种资源,包含了图标、配置文件,界面设计xml等
两个文本文件,一些信息,暂时还不明白用处
AndroidManifest.xml应用的配置文件,这东西暂时不改动,但是当开发复杂的手机应用的时候,会用到它。

2.界面设计器
双击res/layout/mail.xml,代码窗口会摇身一变成为一个所见所得的设计器。这也是activity的默认ui设计方式。习惯动态控制ui的同学不妨先把动态的放一放,玩一玩这个东西。无论怎么样,对于进一步了解android开发,都是有帮助的。
界面设计器里面可以清晰地发现:
a.android的控件分两种:view和layout(其实都是view)
b.view是用来响应用户操作为主,layout是用来安排ui位置为主
c. 点击界面设计器下方的标签页,可以跳转到xml文本编辑模式,查看你的改动,对于xml文件实质上的影响。
d. 在xml文件里面,控件没有用到的属性(空属性),他才去不写进去的办法。
e. 每个view都可以有一个id,属性名称为@+id/xxxxx,其中,xxxxx是一个字符串型的变量(或者说是类似宏定义啊,常量啊之类的东西,我不太清楚java是咋回事,在c里面,更像是一个宏定义)。 程序运行的时候,可以通过这个id来找到控件的实例,并且进行操作。
f.窗口右上角有两个按钮,可以打开布局框线。建议打开,对于添加控件的时候,控件加入位置,能有更加直观的表示(不打开的话,控件拖过去如果不在位置上,是没有反应的,这句话很难描述,建议大家亲自操作一下)
g.属性是可以在激活属性窗口以后,通过按键盘来查找的。比如要搜索id属性,只要激活窗口,按下i,再按d,就会自动跳转到id了。注意:如果正在编辑某个属性的时候,此方法无效




3.添加一个textview
我这里卡住了。原因是,首先不熟悉控件添加的方式。其实只要鼠标点住,拖上去就行。
然后,我不知道怎么排版。 其实只要用到我前面提到的layout里面很多布局view(如linearlayout, listview, gridview等等)
a. 鼠标并不能随意改动控件大小和位置
b.控件的layout->gravity属性,可以设置控件相对于母体(可能是一个view,也可能是屏幕,更有可能是另一个控件)靠左、靠右、靠上、靠下、中间等对齐方式。
c. margin可以设定控件对于边框的距离,注意不能直接输入数字,必须输入10px,其中px,代表像素单位。
d.如果要添加两个textview到并排的一行里,可以铺设一个水平的linearlayout。具体做法,请参考sample里面的apidemos。这里面的内容,实在太丰富了。
e.添加好textview以后,直接在text属性中,输入游戏说明就行了。因为长宽都是默认的wrap_content,即根据内容调整大小,所以不必进行更多设置。


4.添加一个输入框
这里我琢磨了一下,使用autocompletetext还是EditText,后来各处查证,貌似edittext已经足够完成我们需要做的事情了,所以暂时不考虑autocompletetext。
a. 还是一样地拖动
b. 把edittext的id设置好,假设是Input,就选中id属性,输入:@+id/Input即可。也可以在xml上面,添加: android:id="@+id/Input"
c. 需要清除默认的文本(默认文本通常就是默认id的设置值)
d. edit框突然变窄了,因为文本内容是“”,而宽度设定了“wrap_content”导致根据“”来设定宽度,自然变得很窄一条。所以,要把这个width改成fill_parent或者match_parent。这两者的差别,我暂时还没有发现,姑且不论。


5.添加一个检查结果按钮
基本步骤和上面还是一摸一样的,这里就不详细描述了。


6.编写代码
对于java玩多了的人来说,这部分十分简单。
对于玩c的人来说,这部分只是思路清楚,还是要看一下的。
a. 添加activity派生类两个成员变量:m_answer和m_times。一个用来保存系统选中的数字。一个用来保存猜测次数。
b. 成员变量的生存周期完全不一样,不要以为不能使用这个变量的时候,变量就消失了,也不要以为变量还能使用的时候,它就是合法的。(好吧,我知道其实java的同志们根本不关心这东西,但是写c的要注意一下,java的内存机制,和c是截然不同的,毕竟我们装了ndk,哈哈。)
c. 写一个初始化函数,调用Math.random给m_answer赋值。给m_times设置0. 其中,Math.random不需要设置随机数种子,据说java虚拟机把种子问题都已经做好了,不用考虑伪随机不够真的问题,c程序猿内牛满面……

d. 在onCreate里面调用初始化函数(废话)
e. 设置界面响应函数
文本编辑框的响应(光标点击之类的),系统都已经有默认的准备好了,我们只需要关注“检查答案”按钮的设置。这里又是apidemo发挥作用的地方了。随便去找一个有按钮的activity,观察他是怎么做的。很显然,他采用了一种在onCreate的时候,动态添加一个消息响应(姑且这么称呼)的东西。
如果是c#程序猿,应该很好理解,就是添加了一个“委托”。
如果是java程序猿,好吧,我没学过,我不知道怎么理解他。可以去看看《thinking in java》是怎么说的。
如果是c程序猿,就当这里动态添加了一个函数指针吧。
接着,我们看一下这个添加响应的代码:
private OnClickListener mButtonListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
}
};
其中,采用了一种叫做匿名内部类的东西。
OnClickListener是一个类,而这里,是生成这么一个类的实例,叫做mButtonListener。
这个类里面有个虚函数,是onClick。用来处理onClick事件的。在实例化这样一个匿名类的时候,java语法规定:必须把所有的虚函数实化。OnClickListener只有一个虚函数,所以,我们只需要在大括号里面,重载这个函数就行了。@Override是java重载的关键词。
注意,这并不是一个函数声明。这句代码的本质还是 xxxxx yyy = new zzzzzz();
所以,最后大括号的后面,有个分号。而一般类、函数的声明和定义的大括号后面,都是没有分号的。

f.获取文本框内容
相对前面那个需要了解很多关于内部类和匿名内部类的知识,这一步简单多了。只要学习apidemo中的相关代码就可以知道,通过
EditText textbox = (EditText)findViewById(R.id.NumberInput);
String string = textbox.getText().toString();

input = Integer.parseInt(string);
来获得文本框里面的数值。如果出错(比如输入10+空格),则会抛出异常,这里如何处理try{}catch{}就不解释了,绝大多数代码都有这一块内容。
g.弹出对话框
android的对话框很神奇。
他采用了builder的设计模式。(大概是吧,至少看代码样子和命名方式,感觉很有builder的味道),不多说,看代码:
Builder dialog = new AlertDialog.Builder(guess.this); //创建一个builder实例,用来构建对话框,母体是当前活动
dialog.setTitle("Hint"); //告诉建造者,对话框标题
dialog.setMessage(message); //告诉建造者,对话框内容
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
/* User clicked OK so do some stuff */
}
}
);
/*-------------------------------
好吧,我不得不佩服搞java的同志,这里我是把apidemo中的代码精简精简再精简以后的内容,apidemo原文里面,那段神一样的代码,几乎是我完全不能理解的东西。各种把内部类用得出神入化啊……首先要提到
1:这里又实用类匿名内部类,类似于new ClassA(){函数重载;}的方式。
2:作为一个个体,我个人认为:内部类这种东西,除了增加代码阅读难度以外,没什么好处。一样的效果,用函数指针,简单明了得多。当然,也许java的开发人员已经习惯这种风格了……所以仅仅是个人意见。
3:这里给对话框增加了一个类似返回值IDOK的按钮。
------------------------------*/
dialog.create(); //在内存中创建对话框
dialog.show(); //在ui上显示对话框


h:剩余工作
这里不多说了,对于程序的逻辑和结构,说多了反而不容易帮助大家学习。自己去按照一定的顺序组装刚才提到的那些必要功能吧……

然后,调试,测试,打包,发布,第一个无比愚昧的小游戏就做完了。
回顾一下,学到了什么:
1.Android程序的基本单元,构架,生命周期
2.一个工程个个目录的内容,和他必备的东西。
3.ui设计器的基本使用方法
4.匿名内部类
5.按钮交互方式的一种,类似委托,函数指针的东西
6.构建对话框
7.用心的人,估计已经知道什么是builder模式了。

如有遗漏,欢迎补充提醒反馈。

更多相关文章

  1. 三、安卓UI学习(1)
  2. Android(安卓)--- Activity生命周期
  3. android用户界面之按钮(Button)教程实例汇
  4. 锁屏界面
  5. 在Fragment中设置控件点击方法,执行失败。
  6. android 零星调试笔记
  7. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  8. 从 Android(安卓)Sample ApiDemos 中学习 android.animation API
  9. Android常用控件

随机推荐

  1. Android问题集
  2. Android计时器
  3. 小区广播接收流程
  4. Android(安卓)APK 反编译工具
  5. 编写android拨打电话apk应用实例代码
  6. android调用邮件应用发送email
  7. Android中使用Parcelable传递对象,createF
  8. android edittext 输入手机号码格式变化
  9. android猜数字游戏
  10. Android之数据库