本节仍以HelloAndroid项目为例,对Android应用程序的启动过程和各资源的使用进行简单的介绍与分析。
Android系统启动程序之前,首先查看该程序的AndroidManifest.xml文件,查找一个“主Activity”,即程序启动时默认执行的第一个Activity。这个Activity的节点中声明了<intent-filter>标签,<intent-filter>标签中主要包括<action>和<category>两个子标签。<action>标签中的android:name属性值必须为"android.intent.action.MAIN",<category>标签中的android:name属性值必须为"android.intent.category.LAUNCHER",这两者表示该Activity是Android程序的入口点,作用如同Java程序中的main()方法一样:
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
确定了“主Activity”之后,启动该Activity,并执行它的onCreate()方法。Activity的生命周期从onCreate()方法开始,该方法的功能一般是进行布局文件的加载、Activity的初始化等。自此应用程序启动完毕。
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//加载布局文件
}
了解Android程序的基本构成和启动过程之后,下面以示例的方式继续介绍如何进行基本的项目修改。
【例2-1】 更换应用程序的图标和标题。程序运行前后图标的对比如图2-8 所示,而标题在运行前后的对比如图2-9 所示。
图2-8 图标在运行前后的对比
图2-9 标题在运行前后的对比
分析 打开AndroidManifest.xml 清单文件,application 节点定义了如下属性:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher "
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
android:icon用于定义应用的图标,属性值"@mipmap/ic_launcher " 中的@表示引用了mipmap目录下的图片资源文件ic_launcher,只要将ic_launcher的引用改为其他图片的引用,即可更换图标。
android:label用于定义应用的标题,属性值"@string/app_name" 中的@表示引用了字符串资源,资源名称为app_name,只要修改该字符串的定义,即可改变应用的标题。
实现步骤如下:
(1)复制一个图片文件(如 java_coffee.png)到/res/mipmap目录下。复制之前和复制之后mipmap的目录内容对比如图2-10所示。
图2-10 mipmap目录结构
复制之后,该图片会在R.java文件中自动注册(如果R.java文件的内容没有变化,只是说明尚未更新,可编译工程使之更新),只有注册之后程序中才可以引用。R.java文件的前后对比如图2-11和图2-12所示。
图2-11 复制文件之前的R.java文件
图2-12 复制文件之后的R.java文件
(2)修改AndroidManifest.xml清单文件:将 android:icon="@mipmap/ic_launcher"改为android:icon="@mipmap/java_coffee"。
(3)修改strings.xml字符串资源文件:将<string name="app_name">HelloAndroid</string>改为<string name="app_name">Hello</string>。
(4)运行项目,查看效果。
【例2-2】 修改界面显示内容:将界面上显示的“Hello World!”修改为“Hello Android!!”,同时修改文字的颜色、字号等内容。修改前后的运行结果如图2-13 所示。
图2-13 修改前后的运行结果
分析 修改界面显示内容,就需要修改activity_main.xml 布局文件。该文件定义了一个TextView 控件,它的属性android:text 定义了文本内容。控件代码如下:
<TextView
android:text="Hello World!"
android:layout_width="wrap_content"
android:layout_depth="wrap_content" />
只需要将 android:text="Hello World!"改为android:text="Hello Android!!"即可修改显示内容,而颜色和字号可以通过设置属性textColor和textSize实现。
修改之后的代码如下:
<TextView
android:text="Hello Android!!"
android:textColor="#0xff0000"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_depth="wrap_content" />
【例2-3】 实现语言的国际化:当手机的语言设置项改为“简体中文”时,HelloAndroid项目全部改为中文显示。运行效果如图2-14 所示。
图2-14 运行效果图
分析 在Android 工程的res 目录下,通过定义特殊的目录名称就可以实现多语言支持。目录名称为“values-配置选项”,如values-zh-rCN 简体汉语、values-zh-rTW 繁体、values-jp 日语等。
配置选项包括语言代号和地区代号。例如,表示中文和中国的配置选项是 zh-rCN;表示英文和美国的配置选项是en-rUS。zh和en分别表示中文和英文;CN和US分别表示中国和美国;其中的r是必需的。
在每个目录里放置一个strings.xml,strings.xml里是各种语言字符串。如果涉及参数配置类,相关的xml文件夹名称后面也要加上配置选项。这样Android系统语言切换后,应用程序也会跟随实现语言切换。
实现步骤如下:
(1)添加字符串资源:为了实现语言国际化,必须将界面上显示的信息全部都定义为字符串资源,因此修改strings.xml,新定义一个字符串资源show_info。
<resources>
<string name="app_name">Hello</string>
<string name="show_info">Hello Android!!</string>
</resources>
(2)修改布局文件 activity_main.xml :前面的示例中,TextView显示的内容并不是引用字符串资源,而是直接将文字信息定义在属性中。此时,则必须引用字符串资源show_info,因此将android:text的属性值改为"@string/show_info"。
(3)在res下添加一个新的目录,目录名为“values-zh-rCN”。
将工程显示由Android改为Project,具体如图2-15所示。
复制values目录到res中,在复制时,弹出一个提示对话框,如图2-16所示。将名称改为“values-zh-rCN”,其中的zh-rCN代表中文简体。
之后,可以在res目录下查看到新建的目录,如图2-17所示。
(4)修改strings.xml(zh-rCN)内容。
<resources>
<string name="app_name"> 你好</string>
<string name="show_info"> 你好,安卓!!</string>
</resources>
图2-15 切换显示内容
图2-16 修改复制的values目录名称
图2-17 显示新的目录
(5)将模拟器的“语言输入”设置由“美国英语”改为“中国简体”。修改完毕后,再次查看运行结果。