如何在Android中以横向模式旋转显示?

时间:2011-03-21 11:55:56

标签: android rotation orientation landscape sensor

我希望我的视图仅在横向模式下旋转,顺时针和逆时针旋转。

我读到了关于android<逆时针的唯一内容2.2这不是问题,我的App现在是+2.2。

我修改我的清单以捕获配置更改

android:configChanges="keyboardHidden|orientation"

我覆盖我的活动以捕获配置更改

@Override
public void onConfigurationChanged(Configuration newConfig) {

我知道如何抓住方向

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int rot = display.getRotation();

但是......我不知道如何触发适当的横向方向,我这样做:

if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270){
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

但总是旋转到counterclocwise: - (

如何设置左右横向?

修改

如果我在清单中设置方向:

  

机器人:screenOrientation = “风景”

活动的布局始终保持在“左侧风景”中,我希望在左右风景之间进行更改:S

4 个答案:

答案 0 :(得分:58)

如果您要为Android 2.3及更高版本构建应用,则应将清单属性设置为

  

机器人:screenOrientation = “sensorLandscape”

并且您的应用将旋转到(左侧或右侧)横向位置。

如果您正在构建适用于Android 2.2及更早版本的应用,但想要在Android 2.3及更新版本上运行它作为“sensorLandscape”配置,那么您可以尝试这样的事情

public static final int ANDROID_BUILD_GINGERBREAD = 9;
public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= ANDROID_BUILD_GINGERBREAD) {
        setRequestedOrientation(SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
...

在我的案例中,这是处理横向更改的最佳方式。我无法找到更好的方法将屏幕旋转到Android 2.2及更早版本的左右横向方向。 我尝试读取传感器方向并根据它设置横向位置,但在我看来,只要你调用“setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);”传感器关闭(对于您的应用/活动),您无法通过传感器读取方向。

顺便说一句,你真的不需要覆盖“onConfigurationChanged(配置newConfig)”,以使其中的任何一个正常工作。

答案 1 :(得分:6)

在清单活动声明中,而不是

android:screenOrientation = "landscape"

使用

android:screenOrientation = "sensorLandscape"

答案 2 :(得分:1)

您是否尝试将此项添加到活动代码中的清单中,以查看它是否自动处理?

android:screenOrientation = "landscape"

答案 3 :(得分:0)

AndroidManifest.xml - >申请 - >选择了您的活动 - >屏幕方向=风景。