安卓所有的UI组件都继承自View类,ViewGroup是View的一个重要子类,可以作为其他组件的容器用。安卓使用
XML
文件实现对界面UI组件的布局,与之对应的是一个名为
R的Java
类资源文件。当在XML文件中进行布局时,
R.java
文件自动跟进布局内容的变化。这样的设计体现了MVC原则,实现了视图控制与Java代码两者的分离。安卓同样支持在Java文件中实现界面布局(如同Swing组件开发),但是不推荐啦。可以这样搭配:
相对比较固定的布局在XML文件中完成,灵活多变的布局在java文件中完成。
1.自定义组件:
用户可以通过继承View类,并根据需要重写其方法,自定义满足特定业务需要的组件。可重写的方法可包括:
-
- onFinishInflate():当应用从XML布局文件中加载该组件并利用其创建界被面之后掉用。
- onMeasure(int,int):调用该方法来检测View组件及其包含组件的的大小。
- onLayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置及大小时被调用。
- onSizeChanged(int,int,int,int)
- onDraw(Canvas)
- onKeyDown(int,KeyEvent)、onKeyUp(int,KeyEvent)
- onTrackballEvent(MotionEvent):当发生轨迹球事件时调用
- onTouchEvent(MotionEvent)
- onWindowFocusChanged(boolean)
- onAttachenToWindow(),onDetachendFromWindw():当组件加入窗口/与分离时调用。
- onWindowVisibiltyChanged()
2.布局管理器:
不同手机屏幕尺寸各不相同,为很好地解决在不同环境下的布局为,需要使用Android提供的布局管理器。
2.1线性布局
LinearLayout的一个突出特点是
不换行(超出屏幕的内容即不显示)。
常用XML属性:
android:gravity,设置组件的对其方式,居左、中、右等,通过竖线分隔,可设置多属性。
android:orientation,设置组件的排列方式horizontal--水平 vertical--垂直。
2.2表格布局
TableLayout继承自LinearLayout,可以视作一行行的LinearLayout的组成了TableLayout。
每次向TableLayout中添加一个TableRow即增加一行,在TableRow中添加一个组件即增加了一列。
表格布局中,单元格设置有三种:
Shrinkable:该列单元格可以被收缩
Strethchable:该列单元格可以被拉伸
Collapsed:该列单元格被隐藏
2.3帧布局
FrameLayout,直接继承自ViewGroup,把组件一个一个的叠加在一起,用的比较少。
2.4相对布局
RelativeLayout,其内部组件位置总是相对于父兄组件。
内部组件通过如下属性设置目标组件ID来确定组件位置:
android:layout_toLeftOf
android:layout_toRightOf
android:layout_alignTop
android:layout_below
android:layout_above
2.5绝对布局
通过android:layout_x与android:layout_y这两个属性设置绝对数值作为位置。一般不推荐用。
距离单位:
px:像素,每个px对应屏幕上一个点。
dip或dp:设备独立像素。
sp:比例像素,主要处理字体的大小。
in:英寸
mm:毫米
pt:磅
3.其他:
3.1 9match图片
所谓"*.9.png"这是Android os里所支持的一种特殊的图片格式,用它可以实现部分拉伸;这种图片是经过”9妹“进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。第一次做背景填充时,不明所以,扇子改了图片的扩展名,以至于背景填充失真的厉害,特别丑。