@wangwangheng
2014-12-04T06:41:53.000000Z
字数 1770
阅读 2252
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"
>
<Button
android: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便会被填充的视图替代
<ViewStub
android: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()
方法中完成