1.为什么要使用 <merge>
为了避免嵌套过多无用布局,嵌套的布局会让View树的高度变得越来越高,应该尽量减少布局的层级来优化布局。
2.什么情况下使用<merge>
1.如果本打算用FrameLayout作为界面的根布局时,要用<merge>
标签作为根节点,因为View树的ContentView本身就是个FrameLayout,如图:
2.如果打算用RelateLayout或Linearlayout作为界面根布局时,界面中某些可复用的或逻辑独立的布局用<include>
导入,<include>
导入的布局可以考虑用<merge>
作为根节点。现在有个问题:<merge>
根节点内的控件怎么布局呢?
<merge>
根节点内的控件布局取决于<include>
这个布局的父布局是哪个布局:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_gravity="center_horizontal"
android:text="ONE" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="center_horizontal"
android:text="TWO" />
</merge>
父布局是RelateLayout时:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.merge.MergeInRelateLayoutActivity">
<include layout="@layout/merge_in_layout"/>
</RelativeLayout>
<merge>
标签内的控件就按照相对布局排列
父布局是LinearLayout时:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/merge_in_layout" />
</LinearLayout>
<merge>
标签内的控件就按照线性布局排列