6

当我将我的 Android 手机倒置时,我的 Activity 不会旋转以显示倒置的布局,而是保持在横向模式。我用一个非常简单的 HelloWorld 应用程序尝试了这个。我添加android:configChanges="orientation"到清单并onConfigurationChange()在 Activity 中覆盖以在那里设置断点。将设备倒置旋转会产生从纵向(倒置)到横向的一次配置更改,但不会从横向到纵向(倒置)进行第二次更改。这是Android问题还是我需要做些什么?

显现:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="hello.world"
    android:versionCode="1"
    android:versionName="1.0" >
   <uses-sdk android:minSdkVersion="10" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:configChanges="orientation"
            android:name=".HelloWorldActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

活动:

public class HelloWorldActivity
  extends Activity
{
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }

  public void onConfigurationChanged(Configuration newConfig)
  {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
      Log.e("MDO", "orientation change: landscape");
    }
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
    {
      Log.e("MDO", "orientation change: portrait");
    }
  }
}
4

3 回答 3

10

这不是问题,这就是 Android 的工作方式。它只在横向模式下倒置而不是纵向(如果我没记错的话,从 2.2 版开始是横向)。当从纵向变为横向时会发生配置更改,反之亦然。如果您想检查手机是否倒置或朝任何方向翻转,您必须访问加速度计传感器。这是一个关于如何使用它的教程,在这里你有SensorManager文档

编辑:正如问题的作者自己发现的那样,添加android:screenOrientation="fullSensor"到您的清单就足够了,前提是您不想支持任何早于 Android 2.3 (API level 9) 的东西

于 2012-07-20T19:12:00.177 回答
3

设置android:screenOrientation="fullSensor"完成了我想要做的事情。

于 2012-07-20T20:45:56.227 回答
3

在您的 mafifest 中的 configChanges 中包含 screenSize:

android:configChanges="orientation|screenSize"

http://developer.android.com/guide/topics/resources/runtime-changes.html

从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)进行开发时防止由于方向更改而导致运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,您必须声明 android:configChanges="orientation|screenSize"。但是,如果您的应用程序以 API 级别 12 或更低级别为目标,那么您的 Activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 Activity,即使在 Android 3.2 或更高版本的设备上运行时也是如此)。

于 2012-07-20T19:11:50.037 回答