本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:210
评论数量:205
留言数量:-19
访问次数:917919
建立时间:2007年5月10日




[Android]Android学习笔记(1)-永远不变的Hello World 
文章收藏,  网上资源,  软件技术,  电脑与网络

李小白 发表于 2008/10/30 18:11:58

 载自颜承ID:sharetop http://blog.csdn.net/sharetop/archive/2007/12/09/1925939.aspx Google的Android SDK发布也有一段时间了,一直想研究一下却苦于找不到时间。利用这个周未,开始强迫自己再次进入学习状态,原因很简单:我看好开放的gPhone。SDK的下载与安装并不复杂,网上也有不少同学已经进入状态了,我就不再重复了吧。 今天主要讨论的,还是永远不变的话题:Hello World.1.最简单的HelloWorld安装了SDK后,直接生成一个Android Project,一句代码不用写,就能跑出一个最简单的HelloWorld例程。我们看一下它的代码: 500)this.width=500'>500)this.width=500'>public void onCreate(Bundle icicle) ...{500)this.width=500'>        super.onCreate(icicle);500)this.width=500'>        setTheme(android.R.style.Theme_Dark);500)this.width=500'>        setContentView(R.layout.main);    500)this.width=500'>} 看上去实在很简单,只有两句话而已。关键在这个R.layout.main上,凭直觉,这应该是定义的资源。的确,在R.java中只是定义了一个static int 而已,真正的资源描述在res/layout/main.xml文件里(注意:这里的R.java不要手工编辑,每次build project时它都会根据res下的资源描述被自动修改)。 500)this.width=500'><?xml version="1.0" encoding="utf-8"?>500)this.width=500'><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"500)this.width=500'>    android:orientation="vertical"500)this.width=500'>    android:layout_width="fill_parent"500)this.width=500'>    android:layout_height="fill_parent"500)this.width=500'>    >500)this.width=500'><TextView id="@+id/txt"  500)this.width=500'>    android:layout_width="fill_parent" 500)this.width=500'>    android:layout_height="wrap_content" 500)this.width=500'>    android:text="Hello World"500)this.width=500'>    />500)this.width=500'></LinearLayout> 这个文件很好读,一个<LinearLayout>描述了这是一个线性排列的布局,android:orientation=vertical表示所有组件将纵向排布。而经典的Hello World是用一个TextView来展示的。由此,我们知道,Android的程序从一个Activity派生出来,并且从它的onCreate开始启动;Android里要显示的组件用XML文件描述而不用在代码中硬编码(这是一个好的习惯,我们应该从一开始就坚持下去);2.让Button来说Hello World上面的例子是ADT自动生成的代码,似乎与我们一点关系也没有。那我们来改一下代码,因为在windows平台上的Helloworld经常是由一个按钮触发的,所以,我们想第二个Helloworld应该是这样的:加一个按钮和文本输入框,单击按钮后在原来的TextView后面加上输入框中输入的文字。第一步是,增加一个Button和一个EditText,与TextView一样,它们也在main.xml里描述一下: 500)this.width=500'> <EditText id="@+id/edt"  500)this.width=500'>    android:layout_width="fill_parent" 500)this.width=500'>    android:layout_height="wrap_content" 500)this.width=500'>    android:text=""500)this.width=500'>    />   500)this.width=500'><Button id="@+id/go"500)this.width=500'>        android:layout_width="wrap_content" android:layout_height="wrap_content" 500)this.width=500'>        android:text="@string/go">500)this.width=500'>        <requestFocus />500)this.width=500'>    </Button> 这里有两个地方要注意:id=@+id/go,这表示需要一个唯一的UID来作为Button的ID,它的引用名是go。还有一个是android:text=@string/go表示这个按钮的文本不是直接写有main.xml里了,而是来源于另一个资源描述文件strings.xml里,本例中的strings.xml如下: 500)this.width=500'><?xml version="1.0" encoding="utf-8"?>500)this.width=500'><resources>500)this.width=500'>    <string name="app_name">helloTwo</string>500)this.width=500'>    <string name="tit_dialog">提示</string>500)this.width=500'>    <string name="msg_dialog">你好,中国</string>500)this.width=500'>    <string name="ok_dialog">确定</string>500)this.width=500'>    <string name="go">浏览</string> 500)this.width=500'></resources> 然后,在代码里(onCreate函数中)我们加上以下代码(简单起见,用了嵌套类): 500)this.width=500'>Button btn = (Button)findViewById(R.id.go);500)this.width=500'>        btn.setOnClickListener(new View.OnClickListener()500)this.width=500'>500)this.width=500'>        ...{500)this.width=500'>            public void onClick(View v)500)this.width=500'>500)this.width=500'>            ...{500)this.width=500'>                EditText edt=(EditText)helloTwo.this.findViewById(R.id.edt);500)this.width=500'>                            500)this.width=500'>                TextView txt= (TextView)helloTwo.this.findViewById(R.id.txt);500)this.width=500'>                txt.setText(getString(R.string.msg_dialog)+edt.getText());    500)this.width=500'>            }500)this.width=500'>        }); 为铵钮增加一个onClick事件处理器,在点击事件中,设置txt的文本为R.string.msg_dialgo+edt.getText()。这里的关键是两个函数的使用: findViewById(R.id.go)可以根据资源的名称加载View类型的资源,同样用函数getString(R.string.msg_dialog)可以加载字符串资源。编译,run一下看看效果。3. 再让菜单Say Hello从API文档中我们看到Activity中有两个函数:onCreateOptionsMenu和onOptionsItemSelected,显示,这个OptionsMenu就是所谓的上下文菜单(在GPhone的模拟器上,有个键专用于弹出这个菜单)。下面我们就为这个HelloWorld例子加上一个菜单,并且让它可以Say hello。这次,我们不涉及到资源的描述文件了,而是直接使用这两个函数来实现,其实代码也很简单,所以,我们再增加一个退出应用的功能(否则每次都是按取消键退出应用显示太不专业了)。代码如下: 500)this.width=500'>  public boolean onCreateOptionsMenu(Menu menu)500)this.width=500'>500)this.width=500'>    ...{500)this.width=500'>        super.onCreateOptionsMenu(menu);500)this.width=500'>        menu.add(0,1,"say hello");500)this.width=500'>        menu.add(0,2,"exit");500)this.width=500'>        500)this.width=500'>        return true;500)this.width=500'>    }500)this.width=500'>    public boolean onOptionsItemSelected(Item item) 500)this.width=500'>500)this.width=500'>    ...{500)this.width=500'>        super.onOptionsItemSelected(item);500)this.width=500'>        500)this.width=500'>        int id = item.getId();500)this.width=500'>500)this.width=500'>        switch(id)...{500)this.width=500'>        case 1:500)this.width=500'>            AlertDialog.show(this,getString(R.string.app_name), 500)this.width=500'>                           getString(R.string.msg_dialog), getString(R.string.ok_dialog), true);500)this.width=500'>            break;500)this.width=500'>        case 2:500)this.width=500'>            finish();500)this.width=500'>            break;500)this.width=500'>        } 在CreateOptionsMenu时,我们简单地增加两个菜单项,menu.add(组ID,项ID,显示文本),(注意:这里我直接将文字写在代码里,这并不提倡)。然后,在OptionsItemSelected事件中,我们根据选中的菜单项做相应处理,如果选中1,则弹出一个对话框显示资源文件中的“你好,中国”,如果选中2则退出应用。AlertDialog.show是一个静态方法,类似于我们在WIN平台上经常使用的MessageBox一样,很方便的。好了,今天是第一天,先学到这里吧,下回我觉得我有必要仔细研究一个Activity的API了。


阅读全文(3222) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144754486 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号