Android大致可分为四层结构,五块区域。
1、Linux内核层
基于Linux2.6内核。
2、系统运行库层
库和运行时库。
3、应用框架层
提供相应的API。
4、应用层
所有手机应用都属于这一层。
Android应用开发特色
1、四大组件
活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)、内容提供器(Content Provider)。
2、丰富的系统控件
3、SQLite数据库
支持标准的SQL语句,还可以通过安卓封装好的API进行操作
4、地理位置定位
5、强大的多媒体
6、传感器
安卓应用布局分析
1、src
放置所有java源码的位置
2、gen
主要是R.java文件,在项目中添加的每一个资源都会在其中生成一个相应的资源ID。
3、assets
主要存放一些随程序打包的文件,在程序运行时可以动态读取这些文件。若程序使用了WebView加载本地网页的功能,所有网页相关的文件也都会存放在这个目录下。
4、bin
主要是编译产生的文件。
5、libs
放置程序使用的第三方包jar,会被自动添加到程序中。
6、res
在项目中使用到的所有图片、布局、字符串等资源都存放在此。图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。
7、AndroidMainfest.xml
Android项目的配置文件,程序中定义的所有四大组件都需要在这个文件中注册。
8、project.properties
通过一行代码指定编译程序时所使用的SDK版本。
活动注册
活动需要在AndroidManifest.xml文件中进行注册,其中intent-filter里的两行代码很重要,指定了MainActivity为这个程序的主活动,也就是程序打开时会首先启动这个活动。
<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>
MainActivity
项目中的活动需要继承Activity(系统提供的活动基类)才能拥有活动的特性。onCreateOptionMenu()方法用于创建菜单,onCreate()方法是一个活动被创建时必定要执行的方法。安卓讲究逻辑和视图分离,通用的做法是:在布局文件中编写界面,然后在活动中引入进来。(使用setContentView()方法)。
字符串的定义
安卓不提倡在程序中对字符串进行硬编码,所以一般把字符串定义在res/values/strings.xml中。
Res文件夹的构成
以drawable开头的文件夹是放图片资源的,以values开头的文件夹是放字符串的,layout文件夹放布局文件,menu文件夹放菜单文件。各个drawable文件夹是放置同一图片的不同分辨率的版本,根据设备而加载不同的图片,但一般偷懒的话只放一张在drawable-hdpi中。
引用资源
1、在代码中通过R.string.hello_world引用
2、在xml文件中通过@string/hello_world引用。
语法中string可以被替换成drawable、layout等引用其他类型资源。
Logcat的使用
Tools->Android->Android Device Monitor
1、Log.v()
2、Log.d()
3、Log.i()
4、Log.w()
5、Log.e()
可以通过设置tag为自己的字符串以用来过滤掉与程序无关的日志。
简单活动的设计
为了实现逻辑和布局分离,所以需要写布局文件,在活动中用setContentView加载,并在AndroidManifest.xml文件中注册。注册需要用name指定活动,label显示为应用的名称和标题栏,如果这是主活动则需要加上intent-filter标签。
<activity android:name=".FirstActivity"android:label="Thisis FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
如果不想在活动中显示标题栏,则可以在onCreate()中加入requestWindowFeature(Window.FEATURE_NO_TITLE),注意这句需要在setContentView前,否则会报错。
requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout);
Toast(使用的显示消息的方法)
在活动文件中通过findViewByID()方法获取布局文件中的元素,返回的是一个View对象,向下转型成Button对象。通过调用setOnClickListener()方法注册监听器,点击时就会执行监听器中的onClick()方法。
Toast的使用方法为:通过静态方法makeText()创建一个Toast对象,再调用show函数显示。makeText需要三个参数:
1、上下文(由于活动就是一个上下文对象,所以传入活动本身即可)
2、显示的文本内容
3、显示的时间(Toast.LENGTH_SHORT和Toast.LENGTH_LONG两个内置常量可用)
在活动中使用Menu
同样逻辑和设计分离,菜单需要写菜单的布局文件,然后在活动中重写onCreateOptionsMenu()方法。通过getMenuInflate方法获得MenuInflater对象,再调用它的inflate方法为当前活动创建菜单。Inflate方法有两个参数,第一个指定用哪个资源文件创建菜单,第二个指定菜单添加到哪个menu对象中。最后返回true就能显示菜单,返回false就不显示菜单。
@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.main,menu); return true; }
在活动中重写onOptionsItemSelected()方法来定义菜单项响应事件。
@Override public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.add_item: Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show(); break; default: } return true; }
销毁活动
使用finish()函数就可以销毁当前的活动,效果与点击手机的返回键相同。