Android LayoutInflater.inflate(R.layout.activity_test, container,false)参数解析

这篇博客详细解析了Android中LayoutInflater.inflate()方法的用法和参数意义。通过分析源码,解释了当不同参数传递时,如何影响布局的加载和显示。讨论了如何影响最外层控件的宽高以及在父视图中的显示情况,并通过实例展示了inflate()在ListView中的注意事项,指出当attachToRoot设为true时可能导致崩溃的原因。
摘要由CSDN通过智能技术生成

LayoutInflater.inflate()的功能:将一段 XML 资源文件加载成为 View

public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) {
        final Resources res = getContext().getResources();
        if (DEBUG) {
            Log.d(TAG, "INFLATING from resource: \"" + res.getResourceName(resource) + "\" ("
                    + Integer.toHexString(resource) + ")");
        }

        final XmlResourceParser parser = res.getLayout(resource);
        try {
            return inflate(parser, root, attachToRoot);
        } finally {
            parser.close();
        }
}

在源码中通过通过XmlResourceParser去解析xml获取xml信息,保存在parser这个对象里面,然后调用inflate(parser, root, attachToRoot)去添加这个资源文件下的view,构建一个view。

其中,对于inflate()函数传递不同参数分别有不同的效果:

  • inflate(layoutId, null ),则layoutId最外层控件通过layout_width和layout_height无效,因为这两个值是相对于父级确定的

      view的onMeasure方法:主要做的就是根据ViewGroup传入的测量模式和测量值,计算自己应该的宽和高:

      一般是这样的流程:

      如果宽的模式是AT_MOST:则自己计算宽的值。一般是wrap_content

       如果宽的模式是EXACTLY:则直接使用MeasureSpec.getSize(widthMeasureSpec);设置固定值或者match_parent

  • inflate(layoutId, root, false) 则 layoutId最外层控件的宽高设置正常,但在root里面不会显示
  • <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值