用户指定活动方向

问题描述:

我喜欢用户可以指定所需活动的方向:横向或纵向。用户指定活动方向

我的活动被宣布在AndroidManifest.xml这样的:

<activity 
    android:name=“.ActivityA” 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:configChanges="keyboardHidden" 
    android:windowSoftInputMode="adjustResize"> 
</activity> 

而且在活动的onCreate方法我称之为

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    int preferedOrientation = /* Code that get the prefered orientation */ 
    setRequestedOrientation(preferedOrientation); 
    ... 
} 

但是当用户指定的景观,活动首次出现在PORTRAIT中,然后重新创建到LANDSCAPE。

这是怎么回事?

谢谢。

使用android:configChanges="orientation|screenSize"代替android:configChanges="keyboardHidden"

<activity 
    android:name=“.ActivityA” 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:configChanges="orientation|screenSize" 
    android:windowSoftInputMode="adjustResize"> 
</activity> 

Documentation

注意:与Android 3.2(API级13)中, “画面尺寸” 开始也改变时在纵向和横向取向 之间的设备切换。因此,如果你要防止运行时重新启动由于 方向变化的API等级13以上的开发时(通过的minSdkVersion和targetSdkVersion属性声明 ),你 必须包括除“orientation”中的“screenSize”值值为 。也就是说,你必须decalare android:configChanges="orientation|screenSize"。但是,如果您的 应用程序的目标级别为12或更低,则您的活动始终会自行处理此配置更改(即使在更高版本的Android 3.2或更高版本的设备上运行此配置更改 也不会重新启动您的活动)。