Android 如何动态更改活动的布局?

Android 如何动态更改活动的布局?,android,layout,android-activity,Android,Layout,Android Activity,我想创建一个应用程序,用户在开始时选择纵向或横向模式,并从那时起使用该模式。由于这是一个游戏,用户可以在开始新游戏时更改它。我编写了以下测试代码: 公共类MainActivity扩展了活动{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORI

我想创建一个应用程序,用户在开始时选择纵向或横向模式,并从那时起使用该模式。由于这是一个游戏,用户可以在开始新游戏时更改它。我编写了以下测试代码:

公共类MainActivity扩展了活动{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    Button landscape = new Button(this);
    Button portrait  = new Button(this);
    landscape.setText("LandScape");
    landscape.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setupLandscape();
        }
    });
    portrait.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setupPortrait();
        }
    });
    portrait.setText("Portrait");
    LinearLayout ll = new LinearLayout(this);
    ll.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    ll.addView(landscape);
    ll.addView(portrait);
    setContentView(ll);
}

public void setupLandscape(){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    LinearLayout ll = new LinearLayout(this);
    ll.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    ll.setBackgroundColor(Color.rgb(255,0,0));
    setContentView(ll);
}

public void setupPortrait(){
    Toast t = Toast.makeText(this,"Portrait",Toast.LENGTH_SHORT);
    t.show();
}
}


但是,当我按下横向按钮时,什么也没有发生。布局不会重置为其他内容。那么我做错了什么?有什么方法可以实现我想要的吗?

如果创建了两个布局,它应该是自动的。当用户旋转设备时,将重新创建活动,并且应使用适合方向的布局。保留它还有另一件事,但仅仅尝试动态更改布局没有任何效果。方向更改后,您的活动将被销毁并再次创建,它将再次调用onCreate()方法——在该方法中,您的方向将恢复为纵向。这就是为什么什么都没发生。您应该使用
Bundle
object来记住用户选择的方向。另一种方法,然后我想做的是生成另一个活动,对吗?我忘了说您是对的。我也尝试过,并且通过产生一个不同的活动有效地解决了这个问题。谢谢你的帮助。