转载请注明出处:王亟亟的大牛之路
开篇之前日常安利
https://github.com/ddwhan0123/Useful-Open-Source-Android (各种库的收纳,长期维护)
上一篇提到了入口类ReactActivity和他的代理实现类ReactActivityDelegate,这一次继续我们的分析之路
写着一片之前,没有看过任何其他兄弟对相关内容的分析,不是觉得自己牛逼。
是怕别人的思维影响到我的理解,如果讲得不对,欢迎指出!
上一篇的传送门RN安卓实现分析之ReactActivity的前世今生
ReactRootView
这是一个被ReactActivity.setContentView(mReactRootView)
的UI控件,我们先来看下他的实现
public class ReactRootView extends SizeMonitoringFrameLayout
implements RootView, MeasureSpecProvider {...}
- SizeMonitoringFrameLayout 它是一个继承
FrameLayout
的一个ViewGroup,实现没什么复杂的,主要是可以监听尺寸的变化,由OnSizeChangedListener这个接口对外暴露内容。OnSizeChangedListener可以回传4个属性,分别是 新的宽高和旧的宽高。 - RootView 它是一个接口,子控件手势回传时实现,通过onChildStartedNativeGesture方法传递一个MotionEvent对象
- MeasureSpecProvider 它是一个接口,
getWidthMeasureSpec() getHeightMeasureSpec()
两个方法用来计算重新计算根视图的长和宽的值
既然是一个为了计算尺寸而自定义的的Layout那么一定会有onMeasure(),onLayout(),
等方法
首先获取了Mode类型,判断如果是MeasureSpec.AT_MOST
或者MeasureSpec.UNSPECIFIED
就对子控件进行循环计算复制给width
变量,如果不是的话直接调用MeasureSpec.getSize()
方法进行赋值。
MeasureSpec有三种模式:
UNSPECIFIED: 父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小;
EXACTLY: 父元素