他们调用setContentView之后,参数View都会被放入一个FrameLayout中。你调用setContentView之后, 再调用参数View.getParent(),会发现,他们都是被放进了一个FrameLayout布局中。我在想,Parent一样,是不是其子元素显示是否应该一样。可能是我想错。 你说的根布局参数啥的,我没有否定你哈。 有博主指出,setContentView内部还是需要调用inflate方法来实现,所以我才说了那句,动态(inflate)和非动态(setContentView)的本质是相同的。 我说的动态,指的是运行时的那种动态,但是android目前并不支持。 For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use LayoutInflater with an XmlPullParser over a plain XML file at runtime..
结果确实不同,一个是Button的宽高设定无效,一个是设定有效。你可以把上面代码跑一下就知道了。
而且不同机器,对于无效的那种情况,显示是不同的。但是原因是什么,我不太清楚。
Button btn1 = new Button(this);
btn1.setText("按钮1");
elativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
btn1.setLayoutParams(lp1);
setContentView(int layoutResID);
setContentView(View view);其次,看到填充器的参数没,第一个资源引用,第二个根布局,如果第二个为空,那么第一个就全频显示了,出现了你见到的效果。
你可以把第一参数弄成一个Button的ID,然后,第二个参数传ViewGroup.
View view = LayoutInflater.from(this).inflate(resource, root);再次,你可以去看看setContentView的过程。
setContentView后面也是调用inflate来实现布局的。
你说的不对,setContentView方法会将传入参数代表的那个放入到一个FrameLayout布局中。不信你可以上面两种方法set之后,你分别调用getParent方法,会发现,他们都是被放置在FrameLayout布局中。所以,不存在你说的那种现象。
第一个传引用,这个XML是你自己的布局,布局成什么样子,显示就是什么样子,OK没问题吧?
第二个传View,好了,View view = LayoutInflater.from(this).inflate(resource, root);你的问题出现在这个inflate这里,没有根布局的子布局相当于根布局,也就是你的view是什么样子,显示就是什么样子,默认应该是全屏。
也就是说你的 (R.layout.button_layout) 的效果 != (View view = LayoutInflater.from(this).inflate(R.layout.button_layout,null))的效果,既然他们不相等,那就只能说明 layoutInflater.inflate(R.layout.button_layout,null) 出现问题了。
重载函数是为了传不同的参数得到相同的结果,可是你自以为传的是相同的或说是相同效果的参数,得到的却是不一样的结果,这只能说明你的参数不一样。
如果你还认为我的说法有问题,请不吝赐教。
再调用参数View.getParent(),会发现,他们都是被放进了一个FrameLayout布局中。我在想,Parent一样,是不是其子元素显示是否应该一样。可能是我想错。
你说的根布局参数啥的,我没有否定你哈。
有博主指出,setContentView内部还是需要调用inflate方法来实现,所以我才说了那句,动态(inflate)和非动态(setContentView)的本质是相同的。
我说的动态,指的是运行时的那种动态,但是android目前并不支持。
For performance reasons, view inflation relies heavily on pre-processing of XML files
that is done at build time. Therefore, it is not currently possible to
use LayoutInflater with an XmlPullParser over a plain XML file at runtime..
首先,你的问题是;
其次,我说了 (R.layout.button_layout) 的效果 != (View view = LayoutInflater.from(this).inflate(R.layout.button_layout,null))的效果;
最后,这是我测试的代码,你自己看看吧,加了个LinearLayout当做root,然后你的问题就解决了,显示跟传引用是一样的效果。
public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
LinearLayout mLinearLayout = new LinearLayout(this);
View view = LayoutInflater.from(this).inflate(R.layout.activity_main,
mLinearLayout);
setContentView(view);
}
}所以,我才说了那些个话,没有根布局,子布局完全被填充,所以出现全屏了。呵呵。虽然有点朦胧,不过,暂时不用深入去了解。希望能帮到你。
嗯,嘿嘿,我主要是看完了这个人的博客,http://blog.csdn.net/guolin_blog/article/details/12921889
然后提出了上述疑问的。