1.merge标签与LayoutInflater.inflate

2017-03-06  本文已影响335人  crossroads

前言

根据启舰大大 的博客所学习的滑动删除。

一、merge标签:减少冗余的层次从而达到优化UI的目的

<merge/>只能作为XML布局的根标签使用
当Inflate以< merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true。 必须为TRUE,是因为MERGE标签里没有可用的根结点

section.xml

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HELLO "/>
</merge>

这个直接预览的页面是这样的


预览图

将此页面引用:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>
    <include  layout="@layout/section"/>
</LinearLayout>

得到的页面是这样子的:

效果图
由此,可以看出merge标签能够将该标签中的所有控件直接连在上一级布局上面,从而减少布局层级,也就是说会直接将<merge />内的元素添加到<merge />的父元素里
相当于这样子:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HELLO "/>
</LinearLayout>

二、LayoutInflater.inflate()

public View inflate(int resource, ViewGroup root, boolean attachToRoot)  
   View inflate = getLayoutInflater().inflate(R.layout.section, root, false);
        root.addView(inflate);

等价于

getLayoutInflater().inflate(R.layout.section, root, true);
上一篇下一篇

猜你喜欢

热点阅读