Empty Activity就是一个"Hello world"的模板,运行后虚拟机界面出现"Hello world"。所有的模板都是在Add No Activity模板的基础上增加一些简单的控件。以Add No Activity模板显示 "Hello world"为例来认识 Android 的程序结构。
1 app 目录结构
- manifests:用于存放AndroidManifest.xml文件(清单文件),该文件是整个项目的配置文件。
- java:用于存放所有的java代码,在该文件中可以创建多个包,每个包可以存放不同的文件或Activity。
- res:用于存放Android程序所用到的资源,例如图片、布局文件等。
2 Add No Activity 和 Empty Activity 的差异
分别以 Add No Activity(右) 和 Empty Activity(左) 模板新建两个项目,从目录上可以看到 java 和 res 有差异:
(1) Add No Activity 生成的是一个空的项目,没有 ManiActivity、activity_main.xml ;
(2) 虽然两个项目都有 AndroidManifest.xml 文件,但实际上 Add No Activity 没有<intent-filter> 内容。
【关于intent-filter】
-
Intent代表了Android应用的启动”意图”,Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各个属性。
-
Intent Filter实际上相当于Intent的过滤器,一个应用程序开发完成后,需要告诉Android系统自己能够处理哪些隐形的Intent请求,这就需要声明Intent Filter。
标签中设置的 action 属性表示当前 Activity 最先启动,category属性表示当前应用显示在桌面程序列表中。
3 Hello world 程序
通过以上对比,写 Hello world 程序主要就是对 AndroidManifest.xml、ManiActivity、activity_main.xml 三个文件进行修改。
首先看看这三个文件是什么
-
【AndroidManifest.xml】每个 Android 程序创建成功后,都会自动生成一个清单文件AndroidManifest.xml (位于manifests文件夹),该文件是整个项目的配置文件,程序中定义的四大组件( Activity,BroadcastReceiver,Service, ContentProvider )都需要在该文件中进行注册。。
-
【MainActivity】 继承自 AppCompatActivity ,当 Activity 执行时首先会调用 onCreate() 方法,在该方法中通过 setContentView(R.layout.activity_main) 将布局文件转换成 View 对象,显示在界面上。
-
【activity_main.xml】是程序的布局文件,在该布局中可以添加任意的按钮和文本框和其他组件。
3.1 布局
【右击 res】–>【new】–>【XML】–>【layout xml file】
会自动添加 layout文件夹和 activity_main.xml 文件,修改一下文件名。
有可视化直接拖到界面上和文本添加两种模式。
【注意】使用文本添加时注意android:id="@+id/textView" ,id 不要重复。
3.2 新增组件
【右击Java】–>【new】–>【activity】–>【Empty activity】
再看目录,添加了 MainActivity 文件
修改 MainActivity 文件
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//启动内容试图,打开的界面是 activity_main 的布局
}
}
3.3 注册声明Intent Filter
修改 AndroidManifest.xml 文件
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>