Android Studio LayoutInflater如何精确地制作新视图

acruukt9  于 2023-01-13  发布在  Android
关注(0)|答案(2)|浏览(162)

我已经读了here的一个答案,我仍然感到困惑。
““当我第一次开始Android编程的时候,我真的被LayoutInflater和findViewById搞糊涂了,有时我们用一个,有时用另一个。
LayoutInflater用于从您的一个XML布局创建新的View(或Layout)对象。
findViewById只为您提供了一个尚未创建的视图的引用。您可能认为您尚未创建任何视图,但无论何时您在onCreate中调用setContentView,Activity的布局沿着子视图都会在幕后膨胀(创建)。”
我想我明白了,所以当LayoutInflater创建一个新的对象视图,为什么我们不能这样做:
view = new View(context);
view = findViewById(R.id.textView);
我错过了什么吗?谢谢你的回答。
我试着去理解LayOutInflater的工作方式

q0qdq0h2

q0qdq0h21#

简而言之:LayoutInflater帮助您将用XML编写的布局“交换”到代码中,它的解析器接受XML输入并使用Context创建正确的View(在问题的第一行代码中创建new View对象的一些简单方法)。
Activity在幕后完成了这项工作,为我们的开发人员提供了简单的setContentViewfindViewById方法,但您可能还希望添加一些以XML定义的自定义View(因为一些if)或运行时,然后您可以基于已创建/显示的视图正在使用的相同Context(例如Activity本身)来使用LayoutInflater
请注意,当您使用setContentView时,LayoutInflater会将一些基于XML的View附加到Activity,因此

view = findViewById(R.id.textView)

同时,将返回对已膨胀的现有View的引用

view = new View(context)

只是使用上下文在内存中创建一些虚拟View,它不会添加到ActivityFragment以及任何显示的ViewGroup,因此甚至不可见(并且它的view示例与findViewById中找到的示例不同)。

ngynwnxp

ngynwnxp2#

啊对不起,为了删除评论,我开始发短信,毫无意义,所以我删除了。下次我会离开它,对不起我的第一次股票溢出。

相关问题