【问题标题】:How can I rotate display only in landscape mode in android?如何在android中仅在横向模式下旋转显示?
【发布时间】:2011-07-19 15:13:54
【问题描述】:

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

我读到了 android

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

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

但总是逆时针旋转:-(

如何设置左右横向?

编辑

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

android:screenOrientation="landscape"

活动的布局始终保持在“左横向”,我想在左右横向之间切换:S

【问题讨论】:

  • 我的应用程序也有同样的问题。我正在使用 API8,但找不到仅启用横向模式(CW 和 CCW)的方法

标签: android rotation orientation landscape sensors


【解决方案1】:

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

android:screenOrientation = "landscape"

使用

android:screenOrientation = "sensorLandscape"

【讨论】:

    【解决方案2】:

    如果您正在为 Android 2.3 及更高版本构建应用,则应将 manifest 属性设置为

    android: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(Configuration newConfig)”来让这些正常工作。

    【讨论】:

    • 无需定义自己的姜饼和传感器景观 fint 变量,使用 Build.VERSION_CODES.GINGERBREAD 和 ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
    • 你必须定义你自己的变量,因为 Build.VERSION_CODES.GINGERBREAD 和 ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE (还没有)在 Android 2.2 和更早的平台上定义(因为它们当时显然不存在)。此修复适用于 Android 2.2 和更早的 Android 操作系统。
    • 旧的 Android 库不支持 Build.VERSION.SDK_INT,所以我使用 Integer.parseInt(android.os.Build.VERSION.SDK)。此外 android:screenOrientation="landscape" 必须留在清单中(此处的答案中未提及)。
    • 我认为我们可以将 3 种模式用于横向模式:lanscape、reverseLanscape、sensorLandscaped这真的太棒了!
    【解决方案3】:

    AndroidManifest.xml -> 应用程序 -> 选择您的活动 -> 屏幕方向 = 横向。

    【讨论】:

      【解决方案4】:

      您是否尝试将其添加到活动标签内的清单中以查看它是否自动处理?

      android:screenOrientation = "landscape"
      

      【讨论】:

      • 当我这样做时,活动以横向模式开始,但始终是左侧横向,右侧有轨迹球。
      • 这是在一台还是多台设备上?
      • Nexus One 2.3.3,项目配置为API 8
      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 2014-03-26
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多