一、layoutInflater是什么?
我们看到很多地方都用到了layoutInflater,那么他就究竟是什么?
kt
FragmentHomeBinding.inflate(layoutInflater)
kt
/**
* 创建新的ViewHolder实例
*/
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
// 从布局文件inflate视图
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_lyric, parent, false)
return ViewHolder(view)
}
inflate()
方法本身并不知道如何读取 XML 文件并将其转换为 View
。它需要 LayoutInflater
来执行这个关键任务。
LayoutInflater
是一个系统服务。它的职责就是将 XML 布局文件(layout_*.xml
)转换成对应的 View
对象(或 ViewGroup
对象)。
它返回膨胀后的视图树的根视图(通过 binding.root
访问),这个根视图将由 Fragment 系统在适当的时候添加到 container
中。
你可以把它想象成一个 布局翻译器 或 视图构建器:
-
输入: 一个 XML 布局文件(如
R.layout.item_list
)。 -
处理: 解析 XML 标签(
<TextView>
,<Button>
,<LinearLayout>
等),理解它们的属性(android:text
,android:layout_width
等),并考虑当前的主题(Theme
)和上下文(Context
)。 -
输出: 一个完全实例化的、包含所有子视图的
View
对象树(例如,一个LinearLayout
包含一个ImageView
和一个TextView
)。
简单来说,就是XML 到 View的一个过程。