已更新:参见Android1.5版本“猜数字”游戏。
实践才是检验真理的唯一标准,那就亲自做一做来对Android平台下的程序开发有个大致的了解吧。不知道为什么老是和猜数字过不去,上次为了学习Struts也是用了猜数字。
工欲善其事,必先利其器。先搭配环境,Android的SDK+Eclipse3.2+ADT+JDK1.5。关于开发环境的安装请参考这里。
新建一个Android工程
这个好像没什么好说的,都是起名字。看一下MobileGuess项目的目录结构
MobileGuess.java是程序的主类;
R.java是资源文件的索引,它的内容根据你创建的资源自动生成(前提是你给你的资源定义了id这个属性的话),不需要关心太多;
res这个文件夹下存放了程序所需的资源文件,其中drawable文件夹存放图片信息,layout文件夹存放程序的UI布局文件,values存放其他可能的资源文件,诸如颜色配置、数组定义、风格样式等等,这里的string.xml顾名思义定义了文字字段内容,便于国际化。
最后一个AndroidManifest.xml文件定义了程序所用到的所有Activity。通常情况下我们可以把Activity理解成一个空白窗体,一个程序一般有很多窗体构成,所有的窗体都需要在这个文件里面申明。
---------------------
先来设计程序的界面吧,Android的程序界面使用xml文件的方式存储各个控件的位置、颜色、大小等信息。在界面设计上采用了Layout层的概念,在此Layout层上添加各个View。由于我天生的美感丧失,以及对UI界面设计的一窍不通(咳咳),所以我设计的界面只能看看。放出效果图(捣鼓了半天才弄出来的-_-),关于各个参数的含义,需要参考Android’ s Doc。
程序有2个界面,一个用于登录用户,取名为login.xml;另一个用于显示主界面,就用默认的main.xml。
login.xml的显示效果
main.xml的显示效果
--------------------------------
public class MobileGuess extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.login);
level=(RadioGroup)findViewById(R.id.level);
name=(TextView)findViewById(R.id.name);
…}}
Activity是Android最基本的功能单元,类似Struts中的Action,它也是我们设计时必须要继承的。一个Activity是有生命周期的,从onCreate()开始,onDestroty()结束,中间还有onStart(),onResum(),onStop(),onRestart()等等状态,具体参考Android的文档。要想终结一个Activity那就执行 finish() 方法。
你可以把它看成是一个空白窗体,前面设计的界面就是他的外衣。通过setContentView(R.layout.login)方法呈现显示效果。这个R.layout.login就是引用了R.java索引中的资源。窗体上的控件,象文本标签,按钮等在程序中都使用findViewById方法进行引用。比如:name=(TextView)findViewById(R.id.name),这样可以使用name.getText()获取R.id.name这个文本标签里面的内容了。
各个显示控件都有很多属性,比如我的这个程序里面用到了隐藏setVisibility(8)方法,其中参数8代表“消失”,在控件不可见的同时并释放他所占的布局空间。可选的其他参数还有”4″和”0″,分别代表“隐藏”(依然占用布局空间)和“可见”。
-----------------------------------
strings.xml里面存放了程序里面用到的文字信息。在界面设计的XML文件中,通过类似”@string/alert_title”调用;在程序中通过getString(R.string.alert_title)调用。实际使用中发现有个别汉字在某些特殊位置不能正常显示,比如“尊”这个字就不能出现在屏幕的最左端。解决方法就是在string.xml中将不能正常显示的字用Unicode码代替。
------------------------------------
SharedPreferences preferences = getSharedPreferences(“NewGuess”, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(“level”, sLevel);
editor.putString(“name”, playerName);
if (editor.commit()) { … …}
Android中通过SharedPreferences在Activity间共享数据。它类似Session,采取“值-对”的方式保存数据,目前好像只可以存储原始数据类型的数据,不能存储对象。我用它来保存玩家的姓名和游戏难度选择信息。当然了,保存数据也可以用到SQLite数据库,这里因为简单没有用到。
--------------------------------------
Intent intent=new Intent(MobileGuess.this,Guess.class); //参数包含Activity起始转向信息
startActivity(intent);
当从一个窗体跳转到另外一个窗体的时候,Android采用Intent来传达信息,最后用startActivity(intent)执行跳转,当然还有startSubActivity()等其他方法。
----------------------------------------
发现写着写着,我越是没有头绪了。Android这个全新的东西需要学习的太多。连着两个晚上在啃,虽然做了个猜数字的程序,也熟悉了一些Android程序开发的流程和方法,但终究只是冰山一角,皮毛而已。写下开发中遇到的问题和心得,主要是当作笔记,但是回头看看我写下的,发现实在是太烂,我都怀疑自己若干年后回顾这里能看得懂,就此作罢。今天我终于发现我连笔记都不会做!
Android既然是Google出的,那未来主流应用理应和网络、搜索、还有Google Map强大的功能联系在一起。但这些都是我没有涉及的。哎,这年头需要学习的东西真的太多,太多了。
Android的学习就告一段落了,给出“猜数字”的项目源码。声明一下,代码相当简陋,而且基本没有注释(我习惯不好)。如果能给朋友带来帮助那就是我额外的收获了^_^
点击这里下载
已更新:参见Android1.5版本“猜数字”游戏。
发表回复