[名企面试问题][Android]五大布局易混淆知识
发布于 2017-03-03 14:23 1954 次浏览 0 赞 来自 笔试面试  

● 线性布局(LiearLayout): 屏幕垂直或水平方向布局。

   具有垂直方向与水平方向的布局方式,通过设置属性“android:orientation”控制方向,属性值垂直(vertical)和水平(horizontal),默认水平方向。android:layout_weight:权重,用来分配当前控件在剩余空间的大小。正常情况下,值越大占据高度或宽度越大。例外的情况,在LineayLayout布局中使用这个属性时需要注意: 当水平方向布局且子控件的宽度为fill_parent或match_parent时,值越小占据宽度越大,垂直方向也一样。

  这里出现这种情况主要是因为match_parent或fill_parent引起的,系统先给第一个子控件分配parent_width(剩余空间),再给第二个分配parent_width,即分配了两个parent_width,此时剩余为parent_width-2parent_width=-parent_width,这里主要问题就在这里,剩余控件其实已经为一个负数了。接着,第一个控件占宽度:parent_width(当前已有宽度)+权重1/3(-parent_width)=2/3parent_width;第二个控件占宽度:parent_width+权重2/3(-parent_width)=1/3parent_width,所以当宽度都是match_parent时,剩余空间则为负数,谁的权重大谁就会减去越多。

● 帧布局(FrameLayout):控件从屏幕左上角开始布局。

       帧布局或叫层布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。比如百度地图。 

● 相对布局(RelativeLayout): 以其他控件为参照布局。

       相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐。RelativeLayout能替换一些嵌套视图,当我们用LinearLayout来实现一个简单的布局但又使用了过多的嵌套时,就可以考虑使用RelativeLayout重新布局。

● 绝对布局(AbsoluteLayout):以屏幕坐标布局。

  绝对布局也叫坐标布局,指定控件的绝对位置,简单直接,直观性强,但是手机屏幕尺寸差别较大,适应性差,Android 1.5已弃用,可以用RelativeLayout替代。

● 表格布局(TableLayout):按照行列方式布局。

  表格布局继承自LinearLayout,通过TableRow设置行,列数由TableRow中的子控件决定,直接在TableLayout中添加子控件会占据整个一行。


性能优化:

使用抽象布局标签(include, viewstub, merge) 去除不必要的嵌套和View节点 在LinearLayout中慎用layout_weight(绘制2次);


添加回复
回到顶部