Android 在运行时确定屏幕方向

标签 android runtime orientation

这是一个检测屏幕旋转事件并决定保留或更改屏幕方向的伪代码。

public boolean onOrientationChanges(orientation) {
  if(orientation == landscape)
    if(settings.get("lock_orientation"))
      return false;   // Retain portrait mode
    else
      return true; // change to landscape mode

  return true; 
}

如何在 Android 中制作类似的东西?

编辑: 我实际上正在寻找在哪里处理方向变化的答案。我不想通过添加 screenOrientation="portrait"来修复方向。

我需要一些类似于 onConfigurationChanges() 的东西,我可以在其中处理方向,但不需要我手动重绘 View 。

最佳答案

您首先需要一个 Display 实例:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

那么方向可以这样调用:

int orientation = display.getOrientation();

按照自己的方式检查方向并使用它来改变方向:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

希望对你有帮助。

更新:

好的,假设你有一个 oAllow var,它是 Boolean,默认值为 False

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
    int orientation = display.getOrientation(); 
    switch(orientation) {
        case Configuration.ORIENTATION_PORTRAIT:
            if(!oAllow) {
                    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
            break;
        case Configuration.ORIENTATION_LANDSCAPE:
            if(!oAllow) {
                    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            break;
    }
}

您可以添加更多选择。

我没有尝试这个示例,但至少告诉你一些关于如何解决的线索。如果您有任何错误,请告诉我。

更新

getOrientation() 已被弃用 see here .而是使用 getRotation()。要检查设备是否处于横向模式,您可以执行以下操作:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
        .getDefaultDisplay();

int orientation = display.getRotation();

if (orientation == Surface.ROTATION_90
        || orientation == Surface.ROTATION_270) {
    // TODO: add logic for landscape mode here            
}

关于Android 在运行时确定屏幕方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508597/

相关文章:

android - 对话框动画问题

java - 如何在android中读取Epub文件的所有内容?

c# - 视觉 C# : Compile with Runtime DLLs

C++编译时/运行时选项和参数,如何处理?

ipad - 更改方向后在 WebView 中调整YouTube视频的大小

ios - 为一个 Controller [ Storyboard] 创建纵向和横向 View 的最佳方法是什么?

android - 从代码中将方向设置为纵向

android - 为什么我不能使用 if 或 switch on jSONObject?

algorithm - 设计数据结构就像改进堆栈一样

android - 是否可以强制 Android Studio 在属性 Pane 上显示所有 XML 元素的属性?