[关闭]
@ZeroGeek 2015-08-27T06:59:23.000000Z 字数 3903 阅读 724

android之布局优化

android 性能优化 基础知识


前期知识储备

1. LayoutInflate

  1. public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot) {
  2. synchronized (mConstructorArgs){ ... }

平时我们经常使用layout_width和layout_height来设置View的大小,就好像这两个属性确实是用于设置View的大小的。而实际上则不然,它们其实是用于设置View在布局中的大小的.也就是说,首先View必须存在于一个布局中,之后如果将layout_width设置成match_parent表示让View的宽度填充满布局,如果设置成wrap_content表示让View的宽度刚好可以包含其内容,如果设置成具体的数值则View的宽度会变成相应的数值。这也是为什么这两个属性叫作layout_width和layout_height,而不是width和height。

2.View绘制流程

每一个视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()、onLayout()和onDraw()。

2.1 onMeasure()

  1. public class MyView extends View {
  2. ......
  3. @Override
  4. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  5. setMeasuredDimension(200, 200);
  6. }
  7. }

这样的话就把View默认的测量流程覆盖掉了,不管在布局文件中定义MyView这个视图的大小是多少,最终在界面上显示的大小都将会是200*200。
需要注意的是,在setMeasuredDimension()方法调用之后,我们才能使用getMeasuredWidth()和getMeasuredHeight()来获取视图测量出的宽高,以此之前调用这两个方法得到的值都会是0。
由此可见,视图大小的控制是由父视图、布局文件、以及视图本身共同完成的,父视图会提供给子视图参考的大小,而开发人员可以在XML文件中指定视图的大小,然后视图本身会对最终的大小进行拍板。

2.2 onLayout()

2.3 onDraw()

3.view的机制

3.1 view的状态

3.2 视图重绘

4. 自定义view

4.1 完全自定义View控件

4.2 组合控件

4.3 继承控件

布局优化方法

1.布局标签灵活使用(详细使用方法和场景参考底部blog)

2.布局调优工具

优化建议

需要注意的地方

  1. View titleView = findViewById(R.id.my_title_ly) ;
  2. TextView titleTextView = (TextView)titleView.findViewById(R.id.title_tv) ;
  3. titleTextView.setText("new Title");

参考Blog:

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