一个Android的应用是由一个或者多个Activity组成的。Activity是一个UI的容器,其本身并不在用户界面上显示出来。
在一个Android应用中,用户界面是由View 和ViewGroup对象构建的。View与ViewGroup都有很多种类,而它们都是View类的子类。
1、视图组件(View)
一个View在屏幕上占据了一块矩形区域,它负责渲染这块矩形区域(如颜色),也可以处理这块矩形区域发生的事件(如单击了这块区域),并可以设置这块区域是否可见,是否可以获取焦点等。
视图都由View类派生。
2、视图容器组件(Viewgroup)
一个Viewgroup对象是一个Android.view.Viewgroup的实例。
Viewgroup就是View的容器,负责对添加进来的View进行布局。
3、布局组件(Layout)
4、布局参数(LayoutParams)
假设在屏幕上的某个区域由一个Layout占据,那么如果想把一个View加入到这个区域,就必须告诉这个Layout加进来的View所占高、宽、方向等。这些高、宽、方向等信息就封装在一个LayoutParams中。
1、FrameLayout:
FrameLayout是框式布局。好比一块在屏幕上提前预定好的空白区域,然后可以填充一些元素到里面,比如一张图片。所有元素都被放置在FrameLayout区域最左上的位置,而且无法为这些元素指定一个确切位置,如果一个FrameLayout里面有多个子元素,那么后边的子元素的显示会重叠在前一个元素上。
2、LinerLayout:
LinerLayout是线性布局。将自己包含的子元素按照一个方向进行排列。方向有两种,水平或垂直。
Android:orientation=”vertical”或Android:orientation=”horizontal”
3、RelativeLayout:
RelativeLayout是相对布局。它里边的元素的位置是按照里面某元素的相对位置来计算的。出于性能上的考虑,对于相对布局的精确位置的计算值会执行一次,所以如果一个可视化组件B依赖于A,那么必须要让A出现在B的前面。
4、TableLayout
TableLayout是表格式布局。把包含的元素以行和列的形式进行排列。表格的列数为每一行的最大列数,单元格可以为空。
5、LayoutInflater
LayoutInflater用来将XML的布局文件编程一个View的类。因为出于性能上的考虑,从XML的布局文件生成一个View类这个过程是在应用的构建阶段完成的,而不是在应用的运行阶段完成的。
widget包含各种UI元素在应用程序的屏幕中使用。如按钮、列表框、进度条、图片显示等。
1、 按钮(Button):
<Button Android:id=”@+id/XXX”
…
/>
2、 文本框(TextView):
<TextView Android:id=” @+id/XXX”
…
/>
3、 编辑框(EditText):
<EditText Android:id=” @+id/XXX”
…
/>
4、 多项选择(CheckBox):
<CheckBox Android:id=” @+id/XXX”
…
/>
5、 单项选择(RadioGroup):
<RadioGroup Android:id=” @+id/XXX”
<RadioButton Android:id=” @+id/XXX”
…
/>
…
/>
6、 下拉列表(Spinner):
<Spinner Android:id=” @+id/XXX”
…
/>
7、 自动完成文本(AutoCompleteTextView):
<AutoCompleteTextView Android:id=” @+id/XXX”
…
/>
8、 日期选择器(DatePicker):
<DatePicker Android:id=” @+id/XXX”
…
/>
9、 时间选择器(TimePicker):
<TimePicker Android:id=” @+id/XXX”
…
/>
10、滚动视图(ScrollView):
<ScrollView Android:id=” @+id/XXX”
…
/>
11、进度条(ProgressBar):
<ProgressBar Android:id=” @+id/XXX”
…
/>
12、拖动调(SeekBar):
<SeekBar Android:id=” @+id/XXX”
…
/>
13、评分组件(RatingBar)
< RatingBar Android:id=” @+id/XXX”
…
/>
14、图片视图(ImageView):
< ImageView Android:id=” @+id/XXX”
…
/>
15、图片按钮(ImageButton):
< ImageButton Android:id=” @+id/XXX”
…
/>
16、切换图片(ImageSwitch&Gallery):
ImageSwitch是用来图片显示那块区域的控件。
<ImageSwitch Android:id=” @+id/XXX”
…
/>
Gallery是用来控制底下那个图标列表索引用的。
< Gallery Android:id=” @+id/XXX”
…
/>
17、网格视图(GridView):
< GridView Android:id=” @+id/XXX”
…
/>
18、标签(TabView): Android:id=””
<TabHost Android:id=” @+id/XXX”
<TabWidget Android:id=” @+id/XXX”
…
/>
…
/>
菜单为展现应用程序功能和设置提供了一个可靠的界面。按下设备上的MENU键会调出最普通的应用程序菜单。然而,你也可以加入当用户长按一个项目时调出的上下文菜单。
菜单也是用视图层次进行构架的,但你不必自己定义这个架构。你只要为你的Activity定义onCreateOptionsMenu() 和 onCreateContextMenu() 回调方法,并声明你想要包含在菜单中的项目就行了。Android将为你的菜单自动创建视图层次,并在其中绘入你的菜单项。
菜单会自行处理它们的事件,所以你不必为你菜单中的项目注册事件侦听器。当你菜单中的一项被选定时,框架将自动调用 onOptionsItemSelected() 或 onContextItemSelected() 方法。
如同应用程序布局一样。你也可以在一个XML文件中定义你菜单中的项目。
资源定义示例:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game" />
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
Bundle类型:书中讲菜单的地方莫名其妙冒出这个数据类型的说明,那我也在这里记一下吧。Bundle是一个类型安全的容器,它的实现其实就是HashMap做了一层封装。对于HasnMap来讲,任何名值对都可以存进去,值可以是任何java对象。但是对于Bundle不是这样,同样是存的名值对,但是这个值只能是基本类型或基本类型的数组,如String、int、byte、boolean、char等。
让一个ListView显示出来需要3样东西:
1、ListView:需要被显示的列表。
2、Data:和ListView绑定的数据。
3、ListAdapter:是data和ListView的桥梁,起一个适配作用。
需要注意的是Dialog虽然可以在界面上显示,但并非继承于View。
类似Activity,Dialog也是有生命周期的,它的生命周期由Activity来维护。
如AlertDialog、ProgressDialog。
Toast:
这是一个无模式的小窗体,会将显示的信息显示在首页面中。
Notification:
通过这种方式可以使系统将一个图标在状态条上闪,让机器震动,发出声音等。