android inflate 三个参数的含义,LayoutInflater.inflate 3个参数的含义

LayoutInflater.inflate 天天都在用但对它 3 个参数的含义没有很好的理解

之前 root 一直传 null , 现在才知道传 null 在多数情况下都是不对的

public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)

第一个参数是布局ID 没什么说的

第二个参数是 root, 如果传了 root , root 的 LayoutParams (布局参数)就会附加到要 inflate 的 view 的布局中。 有时你 root 传了 null, 发现 view 设置的宽高等没有起作用,这是因为没有 root , view 会按默认布局来实例化。 所以 root 一般都是要传的

第三个参数表示实例化以后的 view 是否添加到 root 中

下面的两段代码其实是等价的:

val view = LayoutInflater.from(this).inflate(R.layout.item_header, root, true)

等价于

val view = LayoutInflater.from(this).inflate(R.layout.item_header, root, false)

root.add(view)

如果 root 传 null, 没有额外的布局参数会被附加

关于返回值: 只有当 root 不为空且 attachToRoot 为 true 时返回的是 root 的根布局, 其它情况返回的都是要 inflate 的 view 的根布局

注意实例化的 view 不一定是添加到传入的 root 中, 完全可以把 attachToRoot 设为 false ,实例化之后再手动 add 到其它的 ViewGroup 中。

root 只是为实例化过程提供一些布局参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.IllegalStateException: ScrollView can host only one direct child at androidx.core.widget.NestedScrollView.addView(NestedScrollView.java:507) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1131) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1101) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1130) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1101) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.inflate(LayoutInflater.java:686) at android.view.LayoutInflater.inflate(LayoutInflater.java:505) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:360) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:443) at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:121) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:722) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$9(RenderTask.java:879) at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$3.run(RenderExecutor.kt:194) at com.android.tools.idea.rendering.RenderExecutor$PriorityRunnable.run(RenderExecutor.kt:292) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
最新发布
06-06

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值