您没有提供一些重要的细节。
1)在我膨胀视图之后,getLayoutParameters()返回null。
我假设你用过这个:
inflater.inflate(R.layout.content, null);
在这种情况下LayoutInflater
不能(根本)正确LayoutParams
对于根Linearlayout
因为它不知道谁将成为它的父级(所以它可以创建正确类型的LayoutParams
)。如果你想使用这个:
inflater.inflate(R.layout.content, someOtherLayout, false/true);
然后是根LinearLayout
会有适当的LayoutParams
因为它会看到类型someOtherLayout
并创建LayoutParams
从这个信息来看。如果这不是您当前所做的,您可能需要提供一段代码以获得更好的答案。
2)在我调用 addChild() 将其添加到其父级之后,
getLayoutParameters() 返回一个有效的对象。
我假设你谈论的是addView()
方法。这addView()
方法将检查LayoutParams
试图添加的视图的视图,如果那些LayoutParams
are null
然后它会自动分配该视图LayoutParams
其返回的对象generateDefaultLayoutParams()
method.
3)检查布局参数,我发现宽度和高度都设置为
-2 (WRAP_CONTENT),这显然不是我在 XML 文件中指定的。
正如我在2处所说,生成的LayoutParams
都来自generateDefaultLayoutParams()
方法将返回一个LayoutParams
实例作为父级的设计目的。例如,一个LinearLayout
有方向HORIZONTAL
(默认)将返回LayoutParams
宽度/高度设置为的实例WRAP_CONTENT
.
4)当我查看随附的 ImageView 的布局参数时,它
读取指定值。
因为LayoutInflater
照顾了这个,因为ImageView
它位于布局的内部,并且有一个已知的父级,LayoutInflater
可以做出适当的LayoutParams
.