如何在android中为纵向和横向模式提供单独的布局

时间:2011-12-06 20:39:54

标签: android

我正在使用一个实时应用程序,其中包含应用程序中的选项卡。当我尝试在纵向和横向之间切换方向时,我有代码显示横向的单独布局。为此,我使用了onConfigurationChanged方法,如下所示

public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);
    if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
        setContentView(R.layout.eventslist);
    }else if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
        setContentView(R.layout.eventstimeline);
    }
}

同样在该特定活动的清单文件中,我使用了两个属性,如下所示

android:screenOrientation="sensor"

android:configChanges="orientation|keyboardHidden"

但是当我旋转设备时,我无法看到我在onConfigurationChanged中指定的横向模式的单独布局。此外,我不希望在横向模式下看到选项卡。对此有任何想法。

2 个答案:

答案 0 :(得分:5)

在参考资料中,您可以为每个方向定义不同的布局,类似于具有屏幕密度的drawable。

布局文件夹旁边,您可以将布局放在:

布局端口:纵向布局

layout-land :横向布局

当然,您应该为这些布局使用相同的名称,与drawables相同。

然后只需setContentView(R.layout。 thatlayout );

答案 1 :(得分:1)

如果您不关心在更改方向时重新创建活动,只需使用相同的名称为portait和landscape创建布局xml文件,并将一个用于portait在布局文件夹中,将一个用于横向布局-land文件夹。 然后就可以了

protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.xml_with_same_name_for_landscape_and_portait);
}

如果您不希望每次方向发生变化时都会减少并重新创建您的活动,那么您似乎表现得很好,但是 Activity doc说:

  

但是,如果配置更改涉及您未处理的任何内容,则仍将重新启动活动并且不会调用onConfigurationChanged(Configuration)。

因此,你的问题是onConfigurationChanged()永远不会被调用。在这种情况下,清单中的chek yout android:configChanges属性。