如何在Android中将屏幕保持在横向模式

pra*_*ant 23 android

我有一项活动应始终以横向模式显示.所以我补充道android:screenOrientation="landscape".

但问题是当我将设备旋转180度时,显示屏会反转.有没有办法处理这个问题,以便始终正确显示屏幕元素.

Cas*_*eyB 57

实际上你真正想要的是指定:

android:screenOrientation="sensorLandscape"
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest.xml中.这将在横向和反向景观之间捕捉时收听传感器数据.

  • 这样可以旋转视图,但不会触发任何事件.当方向从正常视图变为反向视图时,我需要捕获事件.怎么做? (3认同)
  • sensorLandscape被添加到Froyo(2.2)中,因此它可以在任何具有该功能或更高版本的设备上运行. (2认同)

ann*_*nie 10

其他人提到sensorLandscape...要在您的活动(或基本活动)中以编程方式执行此操作,您可以将您的方向设置为:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

我正在这样做onResume().当您在活动中间将设备翻转180度而不必使用时,这将尊重横向和反向横向onConfigurationChanged().

这对我有帮助,因为对于平板电脑我只需要横向/横向反转,对于手机我只需要纵向/纵向反转,并且不想做两个单独的AndroidManifest文件.ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT也存在.


pra*_*ant 8

所以只为每个人提供信息,这就是我所做的.

  1. 在Android清单中添加了android:screenOrientation ="landscape".
  2. 在简历方法中添加这些代码行
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();

if(orientation==Surface.ROTATION_180)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
Run Code Online (Sandbox Code Playgroud)

这样,即使用户将设备颠倒,我的屏幕也始终正确定位.