1

我有一个应用程序,我通过设置设置为仅以纵向模式显示

android:screenOrientation="portrait"

对于清单中的每个活动。这工作正常,当我旋转手机时,我的应用程序屏幕不会旋转。

问题是,如果我用手机以纵向方向启动应用程序,那么当我的第一个 Activity 运行(动画启动屏幕)并且我在第一个 Activity 仍在运行时将手机旋转到横向,当下一个 Activity 启动时(它从第一个活动线程的 finally 块启动)应用程序将退出。它不会强制退出,它只是退出到主屏幕。LogCat 中没有抛出异常或任何其他说明发生这种情况的原因。屏幕从不旋转(因为它不应该)。如果我在横向模式下使用手机启动应用程序,它可以正常工作。这只发生在我从纵向开始并在之后旋转到横向时。

我试过把

android:configChanges="orientation"

在每一项活动中,我也尝试过

android:configChanges="orientation|keyboard|keyboardHidden|screenLayout"

我在活动中执行和不执行 onConfigurationChanged 都尝试了上述方法。当我实现它时,我只是忽略了它(只是调用 super.onConfigurationChanged)。

除了在清单中设置它之外,我还尝试以编程方式将活动设置为纵向。

我还可以通过在打开物理键盘的情况下启动应用程序并在车载底座中启动应用程序来在原始摩托罗拉 Droid 上实现这一点。应用程序启动,启动画面以纵向启动(即使键盘打开或手机在车载底座中),但一旦启动第二个活动,应用程序就会退出。

我认为这与 Activity 在方向更改时被破坏没有任何关系。我所有的全局数据都存储在我的应用程序的自定义 Application 类中,正如我之前提到的,在全局被清除的情况下,我没有遇到任何异常,例如空指针。

我正在使用 Android 2.3.2 在 Verizon 上运行摩托罗拉 Droid 原版。

4

2 回答 2

0

应用程序在方向更改时关闭,因为您必须在 res 文件夹中提供特定资源

  • 例如: res 文件夹中的 layout-land或

通过编程方式在运行时处理更改

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
于 2013-03-18T07:28:55.247 回答
0

我建议以编程方式在初始屏幕或下一个活动中设置方向。尝试实现此代码:

//get the WindowManager Service
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
//get the orientation
int orientation = display.getOrientation();
//orientation % 2 == 0 is portrait mode,
if ((orientation % 2) != 0) (android.view.IWindowManager.Stub.asInterface(ServiceManager.getService("window"))).setOrientation(0);

我希望这会奏效。

于 2011-03-01T00:11:01.127 回答