android2.2如何实现横竖屏变换时调用两个不同的xml布局,Activity代码相同

解决方案 »

  1.   

        @Override 
        public void onConfigurationChanged(Configuration newConfig)
        { 
            super.onConfigurationChanged(newConfig);       
            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
            {
                    setContentView(R.layout.landscape);  //布局1
            }
            else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
            {
                    setContentView(R.layout.portrait);  //布局2
            }
        }
      

  2.   

    http://developer.android.com/training/basics/supporting-devices/screens.html请参照Google推荐的做法,1楼的方法不符合Android的设计哲学, 是一种面向过程的思维方法。简单说:在你项目的res 文件夹下面加个 layout-land/ 然后再里面放入横屏的布局文件,这样Android会自动帮你切换布局。
    MyProject/
        res/
            layout/
                main.xml
            layout-land/
                main.xml
      

  3.   

    是#3,
    是Android的设计哲学,但别扯上什么面向过程还是别的还有一个设置(忘了那个了),Portrait/Landscape切换时是否重启,如果不重启(对用户来说透明),你那有资源也是白搭
      

  4.   


    请问 
    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
      {
      setContentView(R.layout.landscape); //布局1
      }
      else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
      {
      setContentView(R.layout.portrait); //布局2
      }难道不是面向过程的吗? 那你觉得它是面向对象的?
      

  5.   


    我同意你的说法。但面向对象和面向过程是两种截然不同的思维方式。 一个是通过建模,抽象,封装来解决问题。一个是通过分析具体问题得出解决步骤。前面的代码,和google推荐的做法相比,很明显一个是面向对象,一个是面向过程。if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) 如果这种判断只在该类中出现这一次,切在以后的可见的需求变化中,也不会设计到改变,那它的存在还有一定的理由,但如果一个类中到处都充满了关于切屏的判断。我个人认为这种用if来判断的设计很不合理。
      

  6.   

    在res目录下新建立两个文件夹:layout-port和layout-land.
    把横屏的xml放到layout-land里,把竖屏的放到layout-port里,取一样的名字。