代码改变世界

Android布局1

2014-05-06 13:47  soar.  阅读(439)  评论(0编辑  收藏  举报

一、FrameLayout

  1) android3.0以下系统中,FrameLayout包含的一级节点View的layout_margin依赖于layout_gravity属性(可以将layout_gravity理解为margin的参考点),必须设置layout_gravity属性layout_margin才生效。如果在开发中需要兼容2.x系统,在设置FrameLayout的margin时,一定要加上layout_gravity=“top|left”属性。

  2)  向FrameLayout添加多个控件时,一般最大控件确定了布局大小,所以如果最大控件在加载布局时不可见,那么在视图完全加载完毕后将其置为可见时,只能显示一部分。可以通过setMeasureAllChildren(true)来解决该问题。

  android:measureAllChilren=“true”

二、LinearLayout

  1) layout_weight 属性是指LinearLayout先给里面的控件分配完大小之后剩余空间的权重。

计算方式:(模拟一个LinearLayout容器内有3个TextView,weight分别为1:2:2,以width为例)

1、计算出3个TextView的width总和;

2、外层容器width-所有TextView的width总和=剩余可分配宽度(当TextView为fill_parent时,结果很可能是负数);

3、TextView宽度 = TextView自身宽度+按TextView的weight比例计算的剩余分配宽度;

  所以当layout_width/layout_height设置为wrap_content或fill_parent时,实际宽度的分配并不是想象中的按weight比例来分配,因为还要加上view本身的宽度。而设置为0dp时,则可以完全按分配的weight比例来计算(因为按照如上计算方式,抛弃了View本身宽度时,就是按weight比例来计算了)。

  android:layout_weightSum属性可以指定weight的最大总值,一般我们没有指定时,这个总值就是所有子元素(例如上述例子中3个TextView的weight总和)的layout_weight之和。这样的话就可以指定一个子元素占总可用空间的百分比。如设置外层容器的weightSum为1.0,某个TextView的weight为0.5,则该TextView占剩余可用空间的50%。

三、include

  1) include设置的id会覆盖layout中顶层容器的id;

  2) include可以设置layout_width和layout_height,但必须同时设置才能生效,并且会覆盖layout中顶层容器的设置,并且所有layout_*属性均可使用;

四、merge

  1) <merge />只能作为XML布局的根标签使用;

  2) 当Inflate以<merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true(参见inflate(int , android.view.ViewGroup, Boolean)方法);

五、ViewStub

  在平时开发中,我们可以利用include实现布局的模块化,使比较复杂的布局文件结构更加清晰,也可以使用merge来优化布局。而ViewStub也可以用来优化布局,ViewStub不会影响UI初始化时的性能,他是一个不可见,不占布局位置,占用资源非常小的View。

  1) 可以通过android:inflatedId属性重写布局文件中根元素的id;

  2) 在ViewStub上设置的layout_*参数将会应用在包含的布局文件的根元素上;

  3) 当你准备inflate ViewStub时,调用inflate方法即可。还可以设置ViewSub的Visibility为VISIBLE或INVISIBLE,也会触发inflate。值得注意的是,使用inflate()方法能返回布局文件的根View,不用自己去查找;

  4) 当ViewStub inflate后,这个ViewStub就从View层次中移除了。因此,没有必要保留一个对ViewStub的引用(如在类的字段里);

  5) ViewStub不能反复inflate,只能inflate一次,可保留inflate方法或findById返回的ViewSub引用资源的根元素对象;

  6) ViewStub不支持merge;

 

参考资源

layout_weight

http://blog.csdn.net/xiaanming/article/details/13630837

http://blog.csdn.net/fiendvip/article/details/14516841

merge

http://blog.csdn.net/xyz_lmn/article/details/14524567

http://blog.sina.com.cn/s/blog_62f987620100sf13.html