【问题标题】:How to keep the screen in landscape mode in Android如何在Android中使屏幕保持横向模式
【发布时间】:2016-11-17 19:49:52
【问题描述】:

我有一个应该始终以横向模式显示的活动。所以我添加了android:screenOrientation="landscape"

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

【问题讨论】:

  • 所以你希望它是横向还是反向横向?
  • @RobbyPond 现在我正面临一个问题,我希望我的应用程序也是横向和反向横向的。那么如果我在两种模式下都需要呢?

标签: android


【解决方案1】:

其实你真正想要的是指定:

android:screenOrientation="sensorLandscape"

在您的 AndroidManifest.xml 中。这将在横向和反向横向之间捕捉时侦听传感器数据。

【讨论】:

  • +1 感谢 CaseyB,只需 1 分钟即可实现两个方向。再次感谢您节省了我宝贵的时间。
  • 仅供参考,它仅适用于平板电脑,我已经测试过,但默认情况下它始终以纵向模式显示应用程序,即它不能在手机中工作
  • sensorLandscape 已添加到 Froyo (2.2) 中,因此它可以在任何具有该功能或更高版本的设备上运行。
  • 这会正确旋转视图,但不会触发任何事件。当方向从正常视图变为反向视图时,我需要捕获事件。该怎么做?
  • 只是想知道,你为什么需要它?无论如何,风景不就是风景吗?
【解决方案2】:

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

我在onResume() 做这件事。当您在活动中间将设备翻转 180 度时,这将尊重横向和反向横向,而无需使用 onConfigurationChanged()

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

【讨论】:

    【解决方案3】:

    所以仅供大家参考,这就是我所做的。

    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);
    }
    

    这样,即使用户将设备倒置,我的屏幕也始终可以正确定位。

    【讨论】:

    • 它对我不起作用,因为它不会在轮换后再次调用 onResume
    【解决方案4】:

    在 Android Manifest 中这样写:

       android:configChanges="orientation"
                  android:screenOrientation="landscape"
    

    如下例所示。

     <activity android:name=".MainActivity"
                  android:label="@string/app_name"
                  android:configChanges="orientation"
                  android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

    【讨论】:

      【解决方案5】:

      好的方法是使用

      setRequestedOrientation(6);
      

      6 是 sensorLandscape 的值,但似乎没有为它定义常量。

      【讨论】:

        【解决方案6】:

        嗯。这也取决于您使用的框架版本。试试这个作为开始:

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        

        如果效果很好。如果没有,您必须告诉我们更多关于您的应用布局的信息。

        【讨论】:

        • 是的。我这样做了。这是我的 onResume 方法中的内容 Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int 方向 = display.getRotation(); if((orientation==Surface.ROTATION_90) || (orientation==Surface.ROTATION_270)){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }else if(orientation==Surface.ROTATION_180){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        猜你喜欢
        • 2022-01-27
        • 2015-08-31
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        相关资源
        最近更新 更多