当前位置: 代码迷 >> Android >> Android 增高显示布局文件的性能[Lesson 2 - 使用include标签重用Layout]
  详细解决方案

Android 增高显示布局文件的性能[Lesson 2 - 使用include标签重用Layout]

热度:60   发布时间:2016-05-01 20:20:37.0
Android 提高显示布局文件的性能[Lesson 2 - 使用include标签重用Layout]

Re-using Layouts with <include/>

尽管Android提供了很多种小的组件可以重用,我们还需要自定义一些稍微复杂一点的小组件进行重用。我们可以使用<include/> and <merge/> 标签来对当前的layout嵌入一些其他的layout.
在创建一个稍微复杂一点的layout时,重用layout是个很给力的方法。比如我们需要一个YES/NO的控制栏,包含文字提示的Progress bar。这意味着我们可以在很多地方重用那些自定义的layout.

Create a Re-usable Layout [创建一个可重用的Layout]

如果你已经知道哪些组件是会重用的,我们可以创建一个XML并且定义这个layout。
例如:下面定义了一个需要在每个Activity都需要显示的titlebar.xml
  1. <FrameLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  2. ????android:layout_width=”match_parent”??
  3. ????android:layout_height="wrap_content"??
  4. ????android:background="@color/titlebar_bg">??
  5. ??
  6. ????<ImageView?android:layout_width="wrap_content"??
  7. ???????????????android:layout_height="wrap_content"???
  8. ???????????????android:src="@drawable/gafricalogo"?/>??
  9. </FrameLayout>??

Use the <include> Tag [使用<include>标签]

下面示例了一个包含了titlebar控件的布局:
  1. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  2. ????android:orientation="vertical"???
  3. ????android:layout_width=”match_parent”??
  4. ????android:layout_height=”match_parent”??
  5. ????android:background="@color/app_bg"??
  6. ????android:gravity="center_horizontal">??
  7. ??
  8. ????<include?layout="@layout/titlebar"/>??
  9. ??
  10. ????<TextView?android:layout_width=”match_parent”??
  11. ??????????????android:layout_height="wrap_content"??
  12. ??????????????android:text="@string/hello"??
  13. ??????????????android:padding="10dp"?/>??
  14. ??
  15. ????...??
  16. ??
  17. </LinearLayout>??
我们可以重写任何include里面的属性,例如:
  1. <include?android:id=”@+id/news_title”??
  2. ?????????android:layout_width=”match_parent”??
  3. ?????????android:layout_height=”match_parent”??
  4. ?????????layout[email protected]/title”/>??

Use the <merge> Tag [使用<merge>标签]

某些时候,自定义可重用的布局包含了过多的层级标签,比如我们需要在LinearLayout里面嵌入一个重用的组件,而恰恰这个自定义的可重用的组件根节点也是LinearLayout,这样就多了一层没有用的嵌套,无疑这样只会拖慢程序速度。而这个时候如果我们使用merge根标签就可以避免那样的问题。
例如:
  1. <merge?xmlns:android="http://schemas.android.com/apk/res/android">??
  2. ??
  3. ????<Button??
  4. ????????android:layout_width="fill_parent"???
  5. ????????android:layout_height="wrap_content"??
  6. ????????android:text="@string/add"/>??
  7. ??
  8. ????<Button??
  9. ????????android:layout_width="fill_parent"???
  10. ????????android:layout_height="wrap_content"??
  11. ????????android:text="@string/delete"/>??
  12. ??
  13. </merge>??
这样的话,使用<include>包含上面的布局的时候,系统会自动忽略merge层级,而把两个button直接放置与include平级。
  相关解决方案