0

我有代码为纵向和横向设置不同的布局。如果用户翻转设备,是否有办法在活动运行时更改布局?

设置布局的代码

void SetView()
{
   int w=getWindowManager().getDefaultDisplay().getWidth();
   int h=getWindowManager().getDefaultDisplay().getHeight();

   if (w>h)
      setContentView(R.layout.mainHor);
   else
      setContentView(R.layout.mainVer);
}
4

4 回答 4

3

在 res 中创建两个名为 layout-land 和 layout-port 的新文件夹。将横向布局放在 layout-land 中,将纵向放在 layout-port 中。确保 xml 文件具有相同的名称。

此外,正如评论中提到的那样,只要您在布局文件夹中还有一个 Activity 的默认 xml,只制作 layout-land 文件夹就足够了。如果出于任何原因,Android 无法在替代 layout-[orientation] 文件夹中找到所需的布局,它将采用在 layout.xml 中找到的内容。

于 2012-12-02T16:47:38.277 回答
0

res在名为layout和的文件夹下创建两个文件夹layout-land。为纵向和横向放置单独的布局。

然后覆盖onConfigurationChanged

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
            setContentView(R.layout.homepage_screen);
}
于 2012-12-02T16:48:10.510 回答
0
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
                setContentView(R.layout.mainHor);
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
                setContentView(R.layout.mainVer);
    }
  }
于 2012-12-02T16:49:35.057 回答
0

做这个

@Override
public void onConfigurationChanged(Configuration configuration) {
    super.onConfigurationChanged(configuration);
    if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
                setContentView(R.layout.landscape_layout);
    } else if (configuration.orientation == Configuration.ORIENTATION_PORTRAIT){
                setContentView(R.layout.portrait_layout);
    }
  }
于 2012-12-02T17:03:23.643 回答