自定义ViewGroup实践

自定义ViewGrouop - FlowLayout

实现方式

  • 继承特定ViewGroup,例如LinearLayout

    比较常见,效果类似于一堆View的组合。

    实现比较简单,无需自己处理测量与布局的过程。

  • 继承ViewGroup派生特殊layout

    主要用于实现自定义的布局,按照自身需求制定不同的显示方法。

    实现稍微复杂,还需要对ViewGroup进行处理,主要是自身的onMeasure()、onLayout()以及子View的measure过程

注意事项

  • 注意wrap_content的影响
  • 注意margin、pandding的实现

实现步骤

创建ViewGroup

继承ViewGroup
1
2
3
4
5
6
7
8
9
10
public class FlowLayout extends ViewGroup {

public FlowLayout(Context context) {
this(context,null);
}

public FlowLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
}

处理ViewGroup布局

测量ViewGroup大小

通过onMeasure()进行ViewGroup的测量,其中需要先对子View进行测量,然后根据子View的结果确认最终ViewGroup的大小。

1
2


确定ViewGroup位置

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!