一、提出疑问
ViewStub比较简单,之前文章都提及到
《Android 性能优化 三 布局优化ViewStub标签的使用》,但是在使用过程中有一个疑惑,到底是ViewStub上设置的参数有效还是在其包括的layout中设置参数有效?如果不明白描述的问题,可以看下以下布局伪代码。
res/layout/main.xml
<LinearLayout >
<ViewStub
android:id="@+id/viewstub"
android:layout_width="100dip"
android:layout_marginTop="100dip"
android:layout_height="wrap_content"
android:layout="@layout/sub_layout"
/>
</LinearLayout>
res/layout/sub_layout.xml
<TextView
android:layout_width="50dip"
android:layout_marginTop="50dip"
android:layout_height="wrap_content"
android:text="ViewStub中包含的TextVeiw"/>
上面的代码中width最终效果是100dip还是50dip?marginTop是100dip还是50dip?带着这个问题一起看下Android 5.0源码看看ViewStub原理。
为了便于把ViewStub与其infalte()加载出来的android:layout视图做个区分,下文中针对前者统一命名“ViewStub视图”,后者命名“被 加载视图”,仅为了描述统一并不一定是专业名称。
二、分析ViewStub源码
让ViewStub有两种方式一种是调用ViewStub.inflate() 另外一种是设置ViewStub.setVisibility(View.VISIBLE); 其实第二种方式依然是调用的infalte方法,可以看如下ViewStub源码。