基于Java语言的安卓程序编程之三HelloWorld程序解析

时间:2022-01-27 01:27:56

“安卓编程学习第二天”中提到的HelloWorld程序,会显示一个活动,在活动中显示Hello World!的信息,如图1所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析1 HelloWorld程序的活动

基于Java语言的安卓程序编程之三HelloWorld程序解析

图1 HelloWorld程序的活动


那么,是HelloWorld程序中的哪些代码“创造”了这样的一个程序呢?

1 MainActivity.java

在Eclipse主界面左侧的“Package Explorer”中,鼠标左键双击“Hello_World->src->com.exmple.hello_world->MainActivity.java”,则在主界面的右侧会显示该文件的内容,如图1-1所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图1-1 打开MainActivity.java

其中,Hello_World是项目名称,该名称在“安卓编程学习第二天”的2.2.1中设置;src是保存安卓应用程序源代码的文件夹;com.exmple.hello_world是包名称,该名称也是在“安卓编程学习第二天”的2.2.1中设置;MainActivity.java是活动的名称,该名称是在“安卓编程学习第二天”的2.2.5中设置的。

1.1 类所在包的指定

在“MainActivity.java”中,首先要指定类所在的包,即com.exmple.hello_world。

package com.exmple.hello_world;

1.2 类的指定

程序使用关键字“import”指定项目中包含的类,这些类都是在项目中要使用到的。

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

其中,android.os、android.app和android.view是包的名称,Bundle、Activity和Menu是相应包中包含的类。

1.3 活动界面布局的指定

程序的界面布局在MainActivity中指定,MainActivity是程序的主要类。

1 publicclass MainActivityextends Activity {

2   @Override

3    protectedvoid onCreate(Bundle savedInstanceState) {

4       super.onCreate(savedInstanceState);

5       setContentView(R.layout.activity_main);

6    }

7 }

第1行表示创建(定义)一个名为MainActivity的类,extends表示该类派生自Activity。第2行的@Override表示重载,即第3行的onCreate()方法是重载了父类Activity的onCreate方法;如果没有@Override则表示是自定义函数。

当活动第一次被创建时,就会调用onCreate()方法,在该方法中完成视图创建和列表数据绑定等动作。第4行表示在MainActivity的类的OnCreate()函数中,首先调用父类的onCreate()函数,super表示父类,savedInstanceState是onCreate()方法的变量。第5行表示调用MainActivity的setContentView()函数来显示程序界面布局,setContentView()方法的格式为

public void setContentView(int layoutResID)

其中,layoutResID表示程序界面布局文件的ID,R.layout.activity_main即为程序界面布局文件的ID,在“gen->com.example.hello_world->R.java”中定义,如图1-2所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图1-2 activity_main的定义

其中R是一个类,项目中添加的任何资源都会在该类中进行声明,R.layout.actvity_main表示界面布局资源在R类的layout子类中声明,activity_main即为“安卓学习第二天”2.2.5中设置的Layout Name,在本文的2中将介绍程序界面布局文件activity_main.xml。

当活动第一次被创建时,就会调用onCreate()方法,在该方法中完成视图创建和列表数据绑定等动作。

1.4 活动选项菜单的指定

活动的选项菜单也是在MainActivity中指定的,通过重载onCreateOptionsMenu()函数实现。onCreateOptionsMenu()是Activity的方法,其作用是初始化活动的标准选择菜单,该方法的定义格式如下:

public boolean onCreateOptionsMenu(Menu menu)

其中Menu是adroid.view包的接口,该接口用来管理菜单项。当选择菜单第一次显示时,调用该方法。以下代码对onCreateOptionsMenu()方法进行了重载,使其导入自定义的选项菜单。
 1   @Override

 2   publicboolean onCreateOptionsMenu(Menu menu){

 3      getMenuInflater().inflate(R.menu.main, menu);

 4      returntrue;

5  }

第3行的getMenuInflater()是Activity类的一个方法,该方法的返回值是获取到的MenuInflater类的对象。MenuInflater是android.view包的一个类,该类的作用是将菜单的XML文件转换为Menu对象。通过获取到的MenuInflater类的对象调用该类的inflate()方法,该方法的作用是把Menu对象与菜单的XML关联起来,其定义格式为

void inflate(int menuRes, Menu menu)

其中,menuRes表示菜单XML文件的ID,menu表示Menu对象。

第3行中的代码作用就是将主活动的选项菜单与自定义的菜单关联起来,其中menu是onCreateOptionsMenu()方法的参数,即为主活动的选项菜单,R.menu.main是自定义菜单XML文件的ID,在R.java中定义,如图1-3所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图1-3 R.menu.main的定义

从刚才的分析可以看出,在自定义的MainActivity类中重载Activity的onCreate()方法,用来导入界面布局文件;而重载onCreateOptionsMenu()方法用来导入菜单文件。接下来将分析界面布局文件和菜单文件的内容。

2 界面布局文件

鼠标左键双击“Hello_World->res->layout->activity_main.xml”文件,该文件即为界面布局文件。与1.3中setContentView()函数的参数对应,如图2-1所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图2-1 界面布局文件

在activity_main.xml文件中,主要关注其窗口控件对应的代码。

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world"/>

其中,<TextView/>表示在活动中有一个TextView窗口控件,android:layout_width和android:layout_height指定了窗口控件的宽度和高度,android:text指定了TextView窗口控件显示的内容。其中,wrap_content是一个内部静态整数类型的值,表示@string/hello_world表示在“res->values->strings.xml”中定义的名为“hello_world”的字符串,其值为“Hello world!”,如图2-2所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图2-2 hello_world的定义

3 菜单文件

在主活动界面中按下虚拟设备右侧的“MENU”按键,则会在主活动中显示菜单,如图3-1所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图3-1 活动菜单

鼠标双击“res->menu->main.xml”,右侧打开的即为菜单XML文件。main.xml对应1.4中提到的菜单XML文件。在main.xml中有如下代码

<menuxmlns:android="http://schemas.android.com/apk/res/android">

    <item

        android:id="@+id/action_settings"

        android:orderInCategory="100"

        android:showAsAction="never"

        android:title="@string/action_settings"/>

</menu>

其中<menu><item></menu>表示菜单中的项,android:title表示菜单项的内容,“@string/action_settings”表示在“res->values->strings.xml”中定义的名为“action_settings”的字符串,如图2-2所示,“action_settings”字符串的值是“Settings”。

4 配置文件

安卓应用程序项目的配置文件是AndroidManifest.xml文件。鼠标左键双击“Package Explorer”选项卡中Hello_World项目下的AndroidManifest.xml项,之后在右侧下部点击“AndroidManifest.xml”选项卡,即可显示AndroidManifest.xml文件内容,如图4-1所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图4-1 打开AndroidManifest.xml文件

在<application></application>中对MainActivity这个活动进行注册。

<activity

    android:name="com.example.hello_world.MainActivity"

    android:label="@string/app_name">

    <intent-filter>

         <actionandroid:name="android.intent.action.MAIN"/>

 

         <categoryandroid:name="android.intent.category.LAUNCHER"/>

     </intent-filter>

</activity>

其中android:name指定了要注册活动的名称;android:label指定了活动的标题,该标题在res->values->strings.xml中定义,名称是“app_name”的字符串,如图2-2所示。<intent-filter></intent-filter>中指定了MainActivity为这个项目的主活动。

5 程序修改

可以对res->values->strings.xml中定义的字符串进行修改,如图5-1所示。

基于Java语言的安卓程序编程之三HelloWorld程序解析

图5-1 修改后的程序界面