我有一个应用程序,我想在纵向模式下使用,所以我已经定义了 android:screenOrientation=“portrait”在manifest XML中。这适用于HTC Magic手机(并防止方向变化的其他手机以及)。

但当我打开硬件QWERTY键盘(不是虚拟键盘)时,HTC G1手机遇到了一个问题。我的活动保持在肖像模式,但它似乎重新启动,失去了所有的状态。HTC Hero版本不会出现这种情况。

我的应用程序相当大,所以我不希望它在打开键盘时重新启动并失去所有状态。我该如何预防呢?


当前回答

我一直觉得你两者都需要

android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"

其他回答

如上所述,设置android:configChanges你的活动(在manifest文件)到keyboardHidden|方向,然后:

1)覆盖onConfigurationChanged()

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    //here you can handle orientation change
}

2)添加这一行到你的活动的onCreate()

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

这比添加同一行onConfigurationChanged更好,因为你的应用程序将转向纵向模式,然后回到横向(它只会发生一次,但这很烦人)。

你也可以为你的活动设置android:screenOrientation="nosensor"(在manifest中)。但是用这种方法你根本不能处理方向的变化。

在你的androidmanifest.xml文件中:

   <activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation">

or

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

在Visual Studio Xamarin中:

添加:

使用Android.Content.PM;到您的活动名称空间列表。

添加:

[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]

作为你类的属性,像这样:

[Activity(ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : Activity
{...}

请注意,现在这些方法似乎都不起作用!

在Android Studio 1中,一个简单的方法就是添加 android: screenOrientation =“nosensor”。

这有效地锁定了屏幕方向。

在你的活动的OnCreate方法中使用以下代码:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

现在你的方向将被设置为竖屏,永远不会改变。