Android应用发展得越来越快,布局也随之变得越来越复杂,在Android中布局文件也可以像Java代码一样具有复用性,使得代码可以变得清晰。
Android布局代码实现复用性主要是利用include和merge这两个关键字
1、include Android提供了在一个布局中包含另一个布局的简单方法:<include>标签
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/sub_layout" /> </LinearLayout>
sub_layout.xml <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/name" android:layout_width="0dp" android:layout_height="wrap_content" android:text="Hello,Android!" /> </LinearLayout>
2、merge 如果经常使用<include>标签,布局会变得因嵌套过多从而导致UI绘图变慢。<merge>标签可以用来解决这个问题。
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertivcal"> <include layout="@layout/merge_text"> </LinearLayout
<merge> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello merge" /> </merge>
3、ViewStub 尽管<include>标签能够很容易把UI分离成可复用的组件,但会发现包含的布局很少会被用到。类似于进度和错误蓝的布局是可用的,但是他们在正常的使用过程中并不会出现。当被包含进布局以后,这些UI元素仍然是被扩张的,他们会占用CPU周期和内存,尽管不会被展示出来。 ViewStub类是一个不会占据布局控件的不可见的视图。像<include>标签一样,ViewStub引用一个将会被添加到UI上的外部布局。与<include>标签不同,被引用的布局不会被扩张,直到发送特定的请求他才会扩张。有了ViewStub,布局的可选部分只会在需要他们的时候才可用,否则他们就不可见,这将会加快UI的绘制速度。
<ViewStub android:id="+id/view_stub" android:layout_width="match_parent" android:layout_height="wrap_content" android:inflatedId="@+id/sub" android:layout="@layout/sub" />
调用ViewStub的方法 //Inflate by changing the visibility of the ViewStub ((ViewStub)findViewById(R.id.view_stub)).setVisibility(View.VISIBLE); //or by calling inflate View v = ((ViewStub)findViewById(R.id.view_stub)).inflate();