文档章节

Android中inflate和merge结合使用

_
 _OUTMAN_
发布于 2016/06/27 16:27
字数 450
阅读 118
收藏 2

原来自定义View时,使用inflate方法一直以为,是将布局文件的根节点作为View,今天偶然发现会将布局文件的根节点做为子View。

代码和层级如下:

public class MergeView extends LinearLayout {
	public MergeView(Context context) {
		super(context);
		init();
	}
	public MergeView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}
	private void init() {
		inflate(getContext(), R.layout.layout_merge, this);
		
		TextView txt1 = (TextView) findViewById(R.id.txt1);
		TextView txt2 = (TextView) findViewById(R.id.txt2);
		TextView txt3 = (TextView) findViewById(R.id.txt3);
		txt1.setText("test1");
		txt2.setText("test2");
		txt3.setText("test3");
	}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal" 
    android:background="#ff0000">
    <TextView
        android:id="@+id/txt1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title1"
        android:textSize="18dp" />
    <TextView
        android:id="@+id/txt2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title2"
        android:textSize="18dp" />
    <TextView
        android:id="@+id/txt3"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title3"
        android:textSize="18dp" />
</LinearLayout>

第一个箭头,就是自定义LinearLayout

第二个箭头,就是布局文件的根节点

其实第二个节点,是多余的,所以可以使用merge标签来代替。

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal" 
    android:background="#ff0000">
    <TextView
        android:id="@+id/txt1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title1"
        android:textSize="18dp" />
    <TextView
        android:id="@+id/txt2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title2"
        android:textSize="18dp" />
    <TextView
        android:id="@+id/txt3"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="title3"
        android:textSize="18dp" />
</merge>

再看下层级结构图

可以看到自定义LinearLayout下,没有多余节点了

注意:因为merge节点最终没有,所以设置在merge上的属性都没有用,需要在自定义View上设置。

看下使用merge后的效果,可以看到高度、颜色都没有了。

© 著作权归作者所有

上一篇: Android Anr监控
_
粉丝 22
博文 133
码字总数 63959
作品 0
海淀
程序员
私信 提问
布局技巧:使用 ViewStub

多亏了标签,在Android里,很容易就能做到共享和重用UI组件。在Android开发中,很容易就能创建出复杂的UI结构,结果呢,用了很多的View,且其中的一些很少使用。针对这种情况,谢天谢地,And...

鉴客
2011/09/26
716
0
LayoutInflater源码分析

在《(-)Android中的单例模式》分析中,我们分析了Android中单例模式的实现,且以LayoutInflater为实例,本博文就带大家来认识下我们常用的LayoutInflater源码。 1. setContentView 首先来看...

24K男
2018/05/03
0
0
Android性能优化之布局优化

最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节...

Trinea
2013/08/13
294
1
FrameLayout 和 UI 的布局优化

原文出处:http://blog.csdn.net/hmg25/article/details/6203130 FrameLayout 先来看官方文档的定义:FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以...

鉴客
2011/09/26
1K
0
[Android] LayoutInflater原理分析,带你一步步深入了解View(一)

有段时间没写博客了,感觉都有些生疏了呢。最近繁忙的工作终于告一段落,又有时间写文章了,接下来还会继续坚持每一周篇的节奏。 有不少朋友跟我反应,都希望我可以写一篇关于View的文章,讲...

枫兮兮
2014/03/26
58
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
5
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
15
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
8
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部