首页 > 其他分享 >LayoutInflater.from(context).inflate() 和 View.inflate

LayoutInflater.from(context).inflate() 和 View.inflate

时间:2024-12-25 15:23:12浏览次数:7  
标签:LayoutInflater layoutResId attachToRoot context inflate root View

两个都是布局加载器,而View.inflate是封装LayoutInflater.from(context).inflate后的产物,功能相同。
将布局文件/res/layout/my_view.xml实例化为View对象,inflate()方法返回布局文件的view对象。
LayoutInflater.from(getContext()).inflate(int resource,ViewGroup root);//root为null,不把view添加到root中;root非空则添加。
LayoutInflater.from(getContext()).inflate(int resource,ViewGroup root,boolean attachToRoot);//root非空,attachToRoot为true,才把view添加到root中。

区别
因为View.inflate(context,layoutResId,root) 比 LayoutInflater.from(context).inflate(layoutResId, root, attachToRoot) 少了一个attachToRoot参数(是否将layoutResId添加到某个View中,作为其子View)。
在使用View.inflate(context,layoutResId,root) 时,如果root(父View)是null,会导致layoutResId布局中声明的宽高 + 外边距参数,失效。
核心条件就是root(父View)是不是null。
1、使用View.inflate(context,layoutResId,root) root不为null
2、使用LayoutInflater.from(context).inflate(layoutResId, root, attachToRoot) root不为null,且attachToRoot是true
结果:两种方式效果相同,宽高 + 外边距 都有效
3、使用View.inflate(context,layoutResId,root) root为 null
4、使用LayoutInflater.from(context).inflate(layoutResId, root, attachToRoot) root为 null,且attachToRoot是false
两种方式效果相同,宽高 + 外边距 都失效了,宽/高 变成wrap_content,一点要记住这点!!!是变成wrap_content。
至于为什么layoutResId布局宽度和父View一样,当子View失去自身LayoutParams(布局参数)后,父View会自动调整子View的宽高属性,下面会讲,先忽略。
5、如果不想将layoutResId布局添加到父View中,同时又不想丢失layoutResId布局中声明的参数,
LayoutInflater.from(context).inflate(layoutResId, root, attachToRoot)这样写可以做到,root不为null,但是attachToRoot为false。
6、而View.inflate(context,layoutResId,root) 目前为止无法做到,因为它少了一个attachToRoot参数(是否将layoutResId添加到某个View中,作为其子View)。

父View自动调整子View的宽高
当子View 没有 或 失去 自身LayoutParams(布局参数)后,父View会自动调整子View的宽高。
布局类型不同,子View宽高值也不同,说几个常用布局:
FrameLayout:宽 / 高 都会变成match_parent
RelativeLayout 和 ConstraintLayout 一样,宽 / 高 都会变成wrap_content
LinearLayout 设置vertical(垂直方向):宽变成match_parent,高变成wrap_content
LinearLayout 设置horizontal(水平方向):宽 / 高 都会变成wrap_content

layoutResId布局作为子View时,返回的是父布局View,反之返回的是layoutResId布局View。
来源:https://blog.csdn.net/Lan_Se_Tian_Ma/article/details/134819765

标签:LayoutInflater,layoutResId,attachToRoot,context,inflate,root,View
From: https://www.cnblogs.com/xsj1989/p/18630454

相关文章

  • Flutter有关在无Context上下文的地方进行导航和弹出对话框的讨论
    关于导航页面全局监听蓝牙状态的问题Flutter中没有上下文的AlertDialog关于导航页面全局监控蓝牙状态的问题?上边是有关全局监听状态的,但问题都是一致的,就是不在widget的build方法中进行弹窗或路由。第一种使用了go_router库的,通过配置redirect回调进行判断返回的组件,但是不......
  • MCP(Model Context Protocol)模型上下文协议 进阶篇1 - 组件和功能
    前言在准备实战篇2的代码部分时,我意识到之前的架构篇虽然对MCP的整体设计进行了介绍,但关于具体的消息交互细节描述得还不够详细。然而,在实际开发中,消息交互的细节往往是最关键的部分。因此,我决定再开一篇新的进阶篇,作为理论篇向实战篇的过渡,详细说明开发过程中会实际用到的具......
  • Go语言中context 结构原理, 使用场景和用途
    Go语言中context结构原理在Go语言中,context是一个用于在API边界之间传递请求范围的值、取消信号、截止时间等信息的机制。它主要用于处理跨API边界的请求取消、超时控制以及传递请求范围内的共享数据。context的设计目标是为了解决在并发编程中,特别是Goroutines之间相互协作时......
  • WPF DrawingVisual DrawingContext DrawImage RenderTargetBitmap
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • OpenCL 编程步骤 3. 获取Context 上下文
    转载https://deepinout.com/opencl/opencl-basic-tutorials/opencl-create-context.html上下文为关联的设备、内存对象、命令队列、程序对象、内核对象提供一个容器。上下文是OpenCL应用的核心。正是上下文驱动着应用程序与特定设备以及特定设备之间的通信。对于上下文中关联的......
  • 深入理解华为鸿蒙的 Context
    深入理解华为鸿蒙的Context一、引言在华为鸿蒙操作系统里,Context是极为关键的概念。它如同应用运行的信息中心,为应用提供环境信息、资源访问途径以及与系统交互的接口,对构建优质鸿蒙应用至关重要。二、Context的基本概念与作用(一)定义与核心功能Context代表应用运行的上下......
  • RequestContextHolder 与 HttpServletRequest 的联系
    1.什么是RequestContextHolder?RequestContextHolder是Spring框架提供的一个工具类,用于在当前线程中存储和获取与请求相关的上下文信息。它是基于ThreadLocal实现的,能够保证每个线程独立存储和访问请求信息。与HttpServletRequest的关系:HttpServletRequest:是标准......
  • context.Session,写入数据,多久数据会清掉
     遇到一个数据偶尔为空的情况,数据是从sesion里取的,怀疑是session数据清空导致的。在不同的上下文中,context.Session数据的清空时间可能会有所不同。以下是几种可能的情况:ASP.NETCore中的Session:在ASP.NETCore应用程序中,Session的过期时间可以通过配置来设置。默认情......
  • 报错:jsmpeg.min.js:1 The AudioContext was not allowed to start. It must be resume
    文章目录问题分析1.添加用户点击监听事件2.使用userGesture事件3.手动触发用户交互4.使用await和async问题在使用jsmpeg接入视频流时控制台报警告,且页面没出现视频分析这个报错是因为浏览器的安全策略限制,AudioContext需要在用户与页面进行交互(如点击、......
  • 探索Spring之利剑:ApplicationContext接口
    嘿,开发者们!你是否曾在构建Spring应用时,感到困惑于那些复杂的配置和神秘的容器?今天,我们将揭开Spring中一个核心接口——ApplicationContext​的神秘面纱。这不仅是一篇技术文章,更是一次深入Spring心脏的探险之旅。系好安全带,我们即将启程!......