上一讲已经成功运行了HelloWorld,接下来讲解一下
首先我们会想,我们以前的HelloWorld, 都会有个main 函数的入口点, Android应用的入口在哪来呢?
src 下的FirstActivity.java? 貌似找不到任何熟悉的main函数的定义。
不用找了, Android应用里面并没有main函数。但是它确实有个入口:
在AndroidManifest.xml 我们看到这个activity节点
在此前我们已经多次提到Activity,那啥事Activity呢?
我的理解是,Activity是一个容器组件,是一个承载界面,可以和用户进行交换的组件,有点类似PC上的window,但是不一样的是,通常一个Activity通常就占据了整个屏幕,而且当前只能有一个Activity与用户交互。
我们在代码src下添加了一个Activity后,必须同时在AndroidManifest.xml中声明整个activity,才是有效的。如果希望程序启动时,就打开你指定的Activity,则需要在那个activity节点当中加入
现在我们来看看代码:FirstActivity.java
public class FirstActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.first, menu); return true; } }
我们看到这个类的特点:
- 继承自 Activity类
- 重载了onCreate()方法。//onCreateOptionsMenu用于创建菜单,不是必须。
我们已经知道res/layout下面是放置界面布局文件的,我们已经有一个first.xml在那里了,那么代码是怎么和这个界面layout布局文件关联起来的呢?
那是onCreate方法中这句话起的作用:
setContentView(R.layout.first);
当Android应用启动一个Activity时,首先会调用的是onCreate(Bundle savedInstanceState)方法,只有调用了setContentView()方法后,界面才会呈现出来
下面我们来看看layout文件:res/layout/first.xml:
根节点是RelativeLayout, 它是相对布局,一种布局方式,别的布局方式还是有线性布局,帧布局等。
TextView 是文本控件,用于显示文本,不可输入,类似于Label
Button 按钮控件。
观察发现,他们都有这些xml属性:
android:id:控件的id,用于唯一确定控件。
android:layout_width,android:layout_height: 控件的宽高
id的写法一般是@+id/xxxxxx, 宽高的值可以为三种之一:wrap_content, fill_parent, match_parent.
wrap_content是指,在画控件时,根据控件的实际内容来动态确定大小。
fill_parent, match_parent实际上是一个意思,占满父容器的空间,区别只是match_parent是在Android2.2之后引进的。
android:text 是控件的文本内容,值可以直接填写,也可以引用values/strings.xml下的定义。例如
android:text="@string/hello_world" 就是引用了res/values/strings.xml下的:
Hello world!
好了,把Android应用开发的各个基本部分都讲解了,为了更好的理解,我们学以致用,来练习一下。
需求:
设计一个用户登录界面,让用书输入用户名,密码,如果用户名为admin,密码为123,则提示登录成功,否则提示失败。
好, 请听下回分解。