0

我读过这个答案:https ://stackoverflow.com/a/5027921/1364174

并且想知道为什么依赖根参数 inflate 方法会改变其行为,从而极大地造成混乱。

根据该答案,此代码:

view = LayoutInflater.from(getBaseContext()).inflate(R.layout.smallred, null);
parent.addView(view);

将创建将创建在 smallred.xml 中指定的视图,完全忽略标签的属性,用一些神秘的默认值替换它们。

但是此代码将尊重 smallred.xml 中的属性

view = LayoutInflater.from(getBaseContext()).inflate(R.layout.smallred, parent, false);
parent.addView(view);

这是为什么 ?为什么我们需要指定我们稍后将视图插入到的根/父级,nflate" 方法?为什么这是必要的?为什么如果我们不这样做,我们将不会从 .xml 文件中获取属性?

4

1 回答 1

0

可能是因为属性仅在您实际膨胀视图时才被读取,所以一旦您在不提供父视图的情况下对其进行膨胀,您将在膨胀视图中丢失信息。然后,如果将其添加到父级也没关系,数据不存在,因此布局不会像您预期的那样。

layoutinflater 在为您的视图充气时不知道您的父母。所以它甚至不知道它的类。如果你注意到,每个布局里面都有它自己的 LayoutParams 类,你必须告诉 layoutinflater 它必须使用哪一个,否则它们将被丢弃。

于 2013-09-15T19:09:26.080 回答