Android View框架总结(一)

标注:原文出自 逆流的鱼yuiop,根据自己的理解重新写了一份


一、  view和activity的区别

Android的四大组件之一activity是四大组件中唯一一个用来和用户进行交互的组件。可以说activity是Android的视图层。

再细化,activity相当于视图层中的控制层,是用来控制和管理view的,真正用来处理事件的实际上是view。

每个activity内部都有一个window对象,Window对象包含了一个DecorView(实际上是FrameLayout),我们通过serContentView给activity设置显示的view,实际上都是加到了DecorView中。

二、 view有哪些?

Android 提供了种类丰富的view来用对各种需求,例如:提供文字的TextView,提供点击事件的Button,提供显示图片的ImageView,还有各种布局文件,例如:Relativilayout,Linerlayout等,都是继承自View。

三、  ViewGroup是什么?

ViewGroup继承自view,实现了两个接口àViewParentViewManger

ViewManger提供了三个方法,addView(添加),removeView(删除)和UpdateViewLayout(更新)布局。

ViewParent提供了一系列操作子View的方法,例如焦点的切换,显示区域的控制等等。

四、  为什么Google产生viewGroup?

View很多事都能做,包括显示复杂的界面,只需要设计一个复杂的view即可。例如短信通知的icon,一个可以显示文字也可以显示图片的view,用draw方法可以轻松达到这个效果,但是这样复杂,重用性差,所以,我们可以组合ImageView和TextVIew一起用,此时,需要一个容器ViewGroup来装这两个view。

ViewGroup和View最大的不同是可以组合多个view,多个view组合在一起如何摆放就是VIewGroup需要解决的问题。

五、 View的层级结构是什么?

我们平时看到的界面都是一个ViewGroup作为根View,通过往viewGroup中添加子View(可以是view,也可以是viewGroup),来组合出各具特色的界面。

这种从根到叶的组合方式,我们可以看成一个view树,(类似于XML),view的显示和事件处理都依赖于这个View树。

绘制和事件处理的起始点,都是从根view开始一级一级的往下传递。我们从任意一层发起绘制,都将反馈到根view,然后从上往下传递。之前我们说过根view就是Window中的DecorView,也就是一FrameLayout。

六、View的onMeasure()/onLayout/onDraw()方法做了什么?

(1) Measure侧量一个View的大小

(2) Layout摆放一个View的位置

(3)  Draw画出一个View的显示内容

其中Measure和Layout方法都是final的,无法重写,虽然draw不是final的,但是也不建议重写该方法。这三个方法都已经写好了view的逻辑,如果想实现自身的逻辑,而又不破坏view的工作流程,可以 重写 onMeasure() onLayout() onDRaw()方法。
原创文章 7 获赞 9 访问量 1万+

猜你喜欢

转载自blog.csdn.net/maminghuicsdn/article/details/78538248