[关闭]
@wangwangheng 2014-12-04T06:41:53.000000Z 字数 1770 阅读 2026

Android 布局优化

Android优化


1、Android layout_weight和weightSum属性

官方文档关于weightSum的描述

定义weight总和的最大值。如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和作为最大值。一个典型的案例是:通过指定子视图的layout_weight属性为0.5,并设置LinearLayoutweightSum属性为1.0,实现子视图占据可用宽度的50%。

例子:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="#FFFFFFFF"
  6. android:gravity="center"
  7. android:orientation="vertical"
  8. android:weightSum="1"
  9. >
  10. <Button
  11. android:layout_width="0dip" --- 这一个行很重要
  12. android:layout_height="match_parent"
  13. android:layout_weight="0.5"
  14. android:text="Click Button"
  15. />
  16. </LinearLayout>

2、关于RadioButton设置文字居中的问题

  • 一定要给RadioButton设置背景图片或者背景颜色,否则有可能设置文字居中无效

3、 <include/>一个布局的注意点

  • 可以在include标签中添加layout_*参数
  • 如果要让includelayout_*参数覆盖被包含的布局的layout_*参数,则在include的布局参数中必须同时包含layout_width以及layout_height属性
  • 如果一个布局需要包含在不同而布局中,一般都把它的layout_width以及layout_height设置为0dip

4、 ViewStub的使用

如果一个View在只需要显示的地方进行显示,可以用ViewStub
关于ViewStub的官方文档描述:

ViewStub是一种不可视并且大小为0的视图,可以延迟到运行时填充(inflate)布局资源。当ViewStub设置为可视或者inflate()方法被调用的时候,就会填充布局资源,然后ViewStub便会被填充的视图替代

  1. <ViewStub
  2. android:id="@+id/viewStub"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:layout="@layout/myLayout"
  6. android:inflatedId="@+id/myLayoutId"
  7. />

5、 Android绘制View的方式

官方文档的说明:

绘制布局由两个遍历过程组成:测量过程和布局过程测量过程由measure(int,int)方法完成,该方法从上到下遍历视图树。在递归遍历过程中,每个视图都会向下层传递尺寸和规格。当measure方法遍历结束,每个视图都保存了各自的尺寸信息。第二个过程由layout(int left,int top,int right,int bottom)方法完成,这个方法也是由上而下遍历视图树,在遍历过程中,每个父视图通过测量过程的结果定位所有子视图的位置信息。

如果要自定义ViewGroup,则measure过程在onMeasure()方法中完成,layout过程在onLayout()方法中完成

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注