第一天内容:环境搭建,见: 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. android 常用控件的使用 TextView EditTextView
  2. Android学习之五:android一些基本控件
  3. Android中切换屏幕方向时Activity生命周期函数执行情况分析
  4. 如何去掉android 控件默认选中时的背景橘黄色
  5. Android 自定义控件外观
  6. android学习五(android中基本控件的使用)
  7. 【Android 初学】3、控件布局初步
  8. Android 自定义View——自定义View控件

随机推荐

  1. 谷歌宣布Android(安卓)Studio将取代Eclip
  2. android平台下UITesting环境配置
  3. ( 转)关于Android的nodpi,xhdpi,hdpi,mdp
  4. Android(安卓)Studio 最全使用技巧和快捷
  5. Android开发工具Android(安卓)Studio、An
  6. Android之TableLayout布局
  7. Android的线程使用来更新UI----Thread、H
  8. Android之Wifi学习教程
  9. Android开源DiscreteSeekbar:动画气泡指示
  10. Android(安卓)API 中文 (42) ―― ListVi