常见的智能移动设备操作系统有Android、Symbian、Windows Moblie、
Windows Phone、BlackBerry、iOS
Android通过提供一个开源的Linux内核为基础而构建,开放的开发环境。
Google公司2007年11月提出,2008年9月第一款android手机。
Android拥有完善的开发环境,如设备模拟器、调试工具、内存和性能分析工具等,应用程序框架可以方便的重用。Android系统采用了处理速度更快的Dalvik虚拟机,集成了基于WebKit引擎的浏览器以及轻量级数据库管理系统SQLite,拥有优化的图形系统和自定义的2D、3D图形库。
eXtensible Markup Language
标记语言是指在普通文本中加入一些具有特定含义的标记(tag)以对文本的内容进行标识和说明的一种文件表示方法。
xml所使用的标签是非预定义的,被设计为具有自我描述性。xml允许作者自定义标签和自己的文档结构。
xml没有任何行为。xml被设计用来结构化、存储以及传输信息,本身只是纯文本。它不能像程序一样运行,也不会有任何运行结果。它仅仅是包装在xml标签中的纯粹信息,需要另外编写控制其传输的样式表文件。传送接收和显示文档需要另外编写软件或者程序。
在xml中内容和显示是分离的。控制xml显示格式可以使用css、js、XSLT。其中XSLT
(eXtensible Stylesheet Language Transformation)是显示xml 的首选。使用xslt有两种模式,一种是在浏览器显示xml之前先将其转换为html,另一种模式是在服务器上进行xslt转换。
1.4.2 xml的用途
主要用途是各种应用程序之间进行数据传输。
xml可以共享数据
xml可以简化数据传输
xml可以简化平台的变更
xml可以使数据更有用
1.4.3 xml的文档结构
xml使用了简单的具有自我描述性的语法,采用一种有逻辑的树形结构。
src是应用程序源代码所在的文件夹,
一下是创建项目自动生成的MainActivity.java文件
package com.example.hello;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
gen文件夹是应用程序自动生成的资源文件爱你R.java所在的文件,该文件也是必须的。
R.java文件的作用相当于一个项目字典,项目中的用户界面、字符串、图片、声音等资源都会在该类中创建其唯一ID,当项目中使用这些资源时,会通过该ID得到资源的引用。如果程序开发员变更了任何资源文件爱你的内容或属性,R.java文件爱你会随之变动并自动更行R.java类。
R.drawable.background 表示使用资源目录下的res/drawlable/background.png图片文件
Android.jar是支持该应用程序运行的jAR包,它同时还包括该应用程序打包APK文件时需要用到的METE-INF目录。同时还包括Android SDK架构中Android Runtime层中与Dalvik虚拟机同处一层的Android Core Library。这个Jar文件爱你是应用程序的基础。
res/drawable 文件夹中主要存放的是一些图片格式文件
res/layout 文件夹中主要存放的是界面布局的xml文件
res/values 文件夹中包含了所有的xml格式的参数描述文件,如string.xml、color.xml、style.xml和array.xml
在android的应用程序中的用户界面有两种生成方式。可以采用xml布局文件来指定用户界面,也可以采用在Activity中书写java代码的方式来设定用户界面。通常使用前一种方法。
一下是xml布局文件的一个示例
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.hello.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="bujuwenjianshili" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/btn_1"
android:text="开始"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button android:id="@+id/btn_2"
android:text="结束"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
LinearLayout>
RelativeLayout>
AndroidManifest.xml 是全局应用程序描述文件,它定义了应用程序的能力和权限,以及运行方式。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hello"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
application>
manifest>
定义了程序所使用的sdk版本,该文件为项目配置文件,不需要人为改动。
Android应用的基本组件
Activity、Activity Manager、ContentProvider、Service、BroadcastReceiver等组成。
Activity一般含有一组用于构建用户界面的Widget控件,如按钮Button、文本框TextBox、列表List等,实现与用户的交互。一个功能完善的应用程序一般由多个Activity构成,这些Activity之间可相互跳转,可进行页面间的数据传递。
Activity Manager用于管理应用程序的生命周期。
ContentProvider是Android系统提供的一种标准的共享数据的机制。一个应用程序通过实现ContentProvider的抽象接口将自己的数据暴露出去,并且隐蔽了具体的数据存储实现,这样即实现了应用程序内部数据的保密性,又能够让其他应用程序使用这些私有数据。
Service是与Activity独立且可以保持后台运行的服务,相当于一个在后台运行的设有界面的Activity。如果用户不需要显示交互界面但却要长时间运行,就需要使用service
Activity是Android程序的呈现层,显示可视化的用户界面,并接收用户交互所产生的界面事件。
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//设置布局,调用了res/layout/activity_main.xml中定义的界面元素
}
}
程序启动后显示的第一个界面就是应用程序的第一个Activity。@Override表示重写父类的onCreate()方法,Bundle类型的参数保存了应用程序上次关闭时的状态,并可以通过一个Activity传给下一个Activity;
在Activity的生命周期中,只要失去了焦点(离开界面)就可能被进程终止,这时就需要这种机制,能保存当时的状态,这就是savedInstanceState的作用。
活动状态、暂停状态、停止状态、非活动状态
1.创建工程项目
2.用XML构建基本的布局和控件
3.编写和调试Java程序
4.修改AndroidManifest.xml文件
3.2 程序调试的常用方法和调试工具
3.2.1 Java Debug
3.2.2 DDMS
3.2.3 Logcat
3.2.4 Dev Tools
3.3 应用程序的国际化
res\values-zh-rCN
<resources>
<string name="hello">欢迎!string>
<string name="local">地区:中国string>
resources>
res\values-en-rUS
<resources>
<string name="hello">Welcome!string>
<string name="local">Local:USAstring>
resources>
res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/local" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/flag"/>
LinearLayout>
src\edu\hebust\zxm\internationalexample\MainActivity.java
package edu.hebust.zxm.internationalexample;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setTitle("地区和语言的国际化示例");
}
}