Android 当用户翻转设备时,是否有办法更改布局

Android 当用户翻转设备时,是否有办法更改布局,android,Android,我有代码设置不同的纵向和横向布局。如果用户翻转设备,是否有方法在活动运行时更改布局 设置布局的代码 void SetView() { int w=getWindowManager().getDefaultDisplay().getWidth(); int h=getWindowManager().getDefaultDisplay().getHeight(); if (w>h) setContentView(R.layout.mainHor); els

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

设置布局的代码

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

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

在res中创建两个新文件夹,称为layoutland和layoutport。将您的景观布局放在布局区域,将您的肖像放在布局端口。确保xml文件具有相同的名称


另外,正如在评论中提到的,只要布局文件夹中的活动还有一个默认的xml,就可以只创建layout land文件夹。如果由于任何原因,Android无法在alternative layout-[orientation]文件夹中找到所需的布局,它将采用在layout中找到的布局。

在res中创建两个新文件夹,称为layout land和layout port。将您的景观布局放在布局区域,将您的肖像放在布局端口。确保xml文件具有相同的名称


另外,正如在评论中提到的,只要布局文件夹中的活动还有一个默认的xml,就可以只创建layout land文件夹。如果由于任何原因,Android在alternative layout-[orientation]文件夹中找不到所需的布局,它将采用在layout中找到的布局。

res
文件夹下创建两个名为
layout
layout land
的文件夹。放置纵向和横向的分段布局

然后覆盖
onConfigurationChanged

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
            setContentView(R.layout.homepage_screen);
}

res
文件夹下创建两个名为
layout
layout land
的文件夹。放置纵向和横向的分段布局

然后覆盖
onConfigurationChanged

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
            setContentView(R.layout.homepage_screen);
}
这样做

@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);
    }
  }
这样做

@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);
    }
  }

实际上,只要
layout
layout land
就足够了。是的,但是新用户应该使用更多的结构,帮助调试。我不同意。使用您的方法,用户现在被迫为每种可能性使用两种布局,而使用默认的
布局
文件夹,您会得到任何方向的回退。请记住:您不能假设设备的默认布局是纵向的。通常,如果要为纵向和横向创建单独的布局,则应创建单独的布局land/和布局port/资源目录。只有在两个方向都使用的情况下,才将物品放入布局中。开发人员没有“被迫”做任何事情。我通常会创建所有三个布局/、布局地/、布局端口/。方向不可知的活动放在布局中,方向敏感的活动放在其他两个中。谢谢你,这比我试图做的简单得多,只要
layout
layout land
就足够了。是的,但是新用户应该使用更多的结构,帮助调试。我不同意。使用您的方法,用户现在被迫为每种可能性使用两种布局,而使用默认的
布局
文件夹,您会得到任何方向的回退。请记住:您不能假设设备的默认布局是纵向的。通常,如果要为纵向和横向创建单独的布局,则应创建单独的布局land/和布局port/资源目录。只有在两个方向都使用的情况下,才将物品放入布局中。开发人员没有“被迫”做任何事情。我通常会创建所有三个布局/、布局地/、布局端口/。方向不可知的活动进入布局/和方向敏感的活动进入其他两个。谢谢你,这比我试图记录代码中的配置更改要简单得多。当配置改变时,不仅仅是布局可以改变,而且在软件中做每件事都是非常困难的。最好有单独的布局资源文件夹。另请参阅onRetainonConfiguration Instance(),以了解使配置切换更快的方法。不鼓励在代码中捕获配置更改。当配置改变时,不仅仅是布局可以改变,而且在软件中做每件事都是非常困难的。最好有单独的布局资源文件夹。另请参见onRetainonConfigurationInstance(),了解使配置切换更快的方法。