一、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的一个过程。