@wangwangheng
2014-12-04T06:41:53.000000Z
字数 1770
阅读 2462
Android优化
官方文档关于weightSum的描述
定义weight总和的最大值。如果未指定该值,以所有子视图的
layout_weight属性的累加值作为总和作为最大值。一个典型的案例是:通过指定子视图的layout_weight属性为0.5,并设置LinearLayout的weightSum属性为1.0,实现子视图占据可用宽度的50%。
例子:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFFFF"android:gravity="center"android:orientation="vertical"android:weightSum="1"><Buttonandroid:layout_width="0dip" --- 这一个行很重要android:layout_height="match_parent"android:layout_weight="0.5"android:text="Click Button"/></LinearLayout>
- 一定要给RadioButton设置背景图片或者背景颜色,否则有可能设置文字居中无效
<include/>一个布局的注意点
- 可以在
include标签中添加layout_*参数- 如果要让
include的layout_*参数覆盖被包含的布局的layout_*参数,则在include的布局参数中必须同时包含layout_width以及layout_height属性- 如果一个布局需要包含在不同而布局中,一般都把它的
layout_width以及layout_height设置为0dip
如果一个View在只需要显示的地方进行显示,可以用ViewStub
关于ViewStub的官方文档描述:
ViewStub是一种不可视并且大小为0的视图,可以延迟到运行时填充(inflate)布局资源。当ViewStub设置为可视或者inflate()方法被调用的时候,就会填充布局资源,然后ViewStub便会被填充的视图替代
<ViewStubandroid:id="@+id/viewStub"android:layout_width="match_parent"android:layout_height="match_parent"android:layout="@layout/myLayout"android:inflatedId="@+id/myLayoutId"/>
官方文档的说明:
绘制布局由两个遍历过程组成:测量过程和布局过程。测量过程由
measure(int,int)方法完成,该方法从上到下遍历视图树。在递归遍历过程中,每个视图都会向下层传递尺寸和规格。当measure方法遍历结束,每个视图都保存了各自的尺寸信息。第二个过程由layout(int left,int top,int right,int bottom)方法完成,这个方法也是由上而下遍历视图树,在遍历过程中,每个父视图通过测量过程的结果定位所有子视图的位置信息。
如果要自定义ViewGroup,则measure过程在onMeasure()方法中完成,layout过程在onLayout()方法中完成