方向更改时更改活动

时间:2014-04-03 12:16:50

标签: android android-activity landscape-portrait

在我的应用程序中,我有MainActivty,应始终在protrait中查看。如果我将设备转为横向,我会切换到TrendsActivity(显示一些图表)。这是通过MainActivty中的以下代码完成的:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        Intent intent = new Intent(this, TrendsActivity.class);
        startActivity(intent);
    } 
}

然后,当我切换回portait时,我只需在TrendsActivity中调用它:

    @Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
    {
        finish();
    }
}

这样就完成了活动并自动移回MainActivity。到现在为止还挺好。但是如果我在TrendsActivity中按下后退按钮,我会以横向模式回到MainActivity,我不希望这样。我试图在MainActivity中调用以下代码:

    @Override
protected void onRestart()
{
    super.onRestart();
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}

这不起作用,因为现在onConfigurationChanged()如果从未调用MainActivity ...

怎么办?

5 个答案:

答案 0 :(得分:1)

您是否认为通过简单地为横向模式指定备用xml并让MainActivity相应地运行,您可能会实现更清洁的设计?即使没有这个,在方向改变上启动另一项活动也不会是大多数用户所期望的。

答案 1 :(得分:0)

中使用它
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

在MainActivty的onResume()

答案 2 :(得分:0)

您可以尝试仅在Android清单中设置方向,请尝试以下代码

android:screenOrientation="portrait"

因此,清单中的代码看起来就像是

<activity
   android:name=".yourActivityName"
   android:screenOrientation="portrait"
</activity>

答案 3 :(得分:0)

您应该将其添加到AndroidManifest

android:configChanges="orientation"

这样,您可以告诉Android在方向发生变化时调用onConfigurationChanged

答案 4 :(得分:0)

我通过更改MainActivity中的代码来解决这个问题,只更改了fremmedehenvendelser建议的布局XML(Tusen takk!)

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        //setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
        setContentView(R.layout.activity_trends);
    }
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
    {
        setContentView(R.layout.activity_main);
    } 
}

下一个问题是设置主题以使此布局以全屏显示。注释掉的代码不起作用......在我的TrendsActivity清单中有这个之前

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
相关问题