解决方案 »

  1.   

    结果不同吗 不都是显示这个layout吗 求图求真相
      

  2.   


    结果确实不同,一个是Button的宽高设定无效,一个是设定有效。你可以把上面代码跑一下就知道了。
    而且不同机器,对于无效的那种情况,显示是不同的。但是原因是什么,我不太清楚。
      

  3.   

    第一个是正常的布局,第二个是用来动态加载的,它的属性要通过动态设置。比如说
    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);
      

  4.   

    首先,看下参数,一个传的是XML布局的引用,一个传的是View。
    setContentView(int layoutResID);
    setContentView(View view);其次,看到填充器的参数没,第一个资源引用,第二个根布局,如果第二个为空,那么第一个就全频显示了,出现了你见到的效果。
    你可以把第一参数弄成一个Button的ID,然后,第二个参数传ViewGroup.
    View view = LayoutInflater.from(this).inflate(resource, root);再次,你可以去看看setContentView的过程。
      

  5.   


    setContentView后面也是调用inflate来实现布局的。
      

  6.   


    你说的不对,setContentView方法会将传入参数代表的那个放入到一个FrameLayout布局中。不信你可以上面两种方法set之后,你分别调用getParent方法,会发现,他们都是被放置在FrameLayout布局中。所以,不存在你说的那种现象。
      

  7.   

    这两种方法都是需要生成识别符在R文件中的,你所说的动态和正常布局,其实是一样的,没有太大区别。最后都是需要调用inflate方法。
      

  8.   

    说错,第一个参数是子布局,传layout。
      

  9.   

    view 和 XML的关系问题
    第一个传引用,这个XML是你自己的布局,布局成什么样子,显示就是什么样子,OK没问题吧?
    第二个传View,好了,View view = LayoutInflater.from(this).inflate(resource, root);你的问题出现在这个inflate这里,没有根布局的子布局相当于根布局,也就是你的view是什么样子,显示就是什么样子,默认应该是全屏。
      

  10.   

    你传了2个你自认为相等的参数给setContentView;可是等到的结果却不是你想要的结果,这只能说明你传的参数不一样,OK?
    也就是说你的 (R.layout.button_layout) 的效果 != (View view = LayoutInflater.from(this).inflate(R.layout.button_layout,null))的效果,既然他们不相等,那就只能说明 layoutInflater.inflate(R.layout.button_layout,null) 出现问题了。
    重载函数是为了传不同的参数得到相同的结果,可是你自以为传的是相同的或说是相同效果的参数,得到的却是不一样的结果,这只能说明你的参数不一样。
    如果你还认为我的说法有问题,请不吝赐教。
      

  11.   

    他们调用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..
      

  12.   

    有关于函数重载的那句,我收回,那天中午都没睡,头都被绕晕了,还有为什么只能连续回复三次?难道是防止刷屏?汗。
    首先,你的问题是;
    其次,我说了 (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);
    }
    }所以,我才说了那些个话,没有根布局,子布局完全被填充,所以出现全屏了。呵呵。虽然有点朦胧,不过,暂时不用深入去了解。希望能帮到你。
      

  13.   


    嗯,嘿嘿,我主要是看完了这个人的博客,http://blog.csdn.net/guolin_blog/article/details/12921889
    然后提出了上述疑问的。