我希望我的活动仅在纵向和反向纵向两种模式下可用。我该如何实现这一点?当我设置 android:screenOrientation="portrait"
时,它将强制活动仅处于普通纵向状态,反之亦然。
请不要告诉我强制/锁定方向是一个不好的方法。我知道这一点,但客户仍然要求这样做。感谢您的理解和任何想法。
更新:API等级在11及以上
我希望我的活动仅在纵向和反向纵向两种模式下可用。我该如何实现这一点?当我设置 android:screenOrientation="portrait"
时,它将强制活动仅处于普通纵向状态,反之亦然。
请不要告诉我强制/锁定方向是一个不好的方法。我知道这一点,但客户仍然要求这样做。感谢您的理解和任何想法。
更新:API等级在11及以上
如果您的API级别为9或更高,请使用android:screenOrientation="sensorPortrait"
。
纵向方向,但根据设备传感器可以是普通纵向或反向纵向。在API级别9中添加。
sensorPortrait
正常工作。它永远不支持倒置的竖屏(即 reversePortrait
)。但是,使用 fullSensor
可以正常工作,但它也允许横屏。对我来说这没问题,但如果你只想要 portrait
和 reversePortrait
,你可以在你的 Activity 中使用 onConfigurationChanged
和 newConfig.orientation
拦截方向更改,并忽略或覆盖横屏更改。 - Joshua Pinter为了后代,我将其用于向后兼容...
public final class OrientationHelper {
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public static void setRequestedOrientationSensorPortrait(Activity activity) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
} else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public static void setRequestedOrientationSensorLandscape(Activity activity) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
} else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OrientationHelper.setRequestedOrientationSensorPortrait(this);
super.setContentView(R.layout.my_layout);
}
AndroidManifest.xml
文件中:android:screenOrientation="portrait|reversePortrait"
android:configuration="keyboardHidden|orientation"
WhateverActivity.java
文件中:protected void onConfigurationChanged(Configuration newConfig) {
int currentOrientation = getResources().getConfiguration().orientation;
if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ||
newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) {
super.onConfigurationChanged(newConfig);
}
}