Android在运行时确定屏幕方向

Yon*_*Fei 21 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; 
}
Run Code Online (Sandbox Code Playgroud)

如何在Android中制作类似的内容?

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

我需要一些东西,类似于onConfigurationChanges(),我可以处理方向,但不需要我手动重绘视图.

Ogu*_*han 47

Display首先需要一个实例:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
Run Code Online (Sandbox Code Playgroud)

然后可以像这样调用方向:

int orientation = display.getOrientation();
Run Code Online (Sandbox Code Playgroud)

检查方向,并使用它来改变方向:

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

我希望它有所帮助.

更新:

好吧,假设你有一个oAllowvar,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以添加更多选择.

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

UPDATE

getOrientation()已经弃用了,请看这里.而是使用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            
}
Run Code Online (Sandbox Code Playgroud)

  • display.getOrientation(); 被诽谤.尝试使用getResources().getConfiguration().orientation (4认同)

Tal*_*awk 18

试试跑步

getResources().getConfiguration().orientation
Run Code Online (Sandbox Code Playgroud)

从您的上下文对象中确定运行时的屏幕方向,这里记录了可能的值

为了捕捉方向更改事件,您可以在Android开发指南中找到答案:处理配置更改自己

从指南:

例如,以下清单代码声明了一个处理屏幕方向更改和键盘可用性更改的活动:

<activity android:name =".MyActivity"
android:configChanges ="orientation | keyboardHidden"
android:label ="@ string/app_name">

现在,当其中一个配置发生变化时,MyActivity不会重启.相反,MyActivity接收对onConfigurationChanged()的调用.此方法传递一个Configuration对象,该对象指定新设备配置.通过读取"配置"中的字段,您可以确定新配置并通过更新界面中使用的资源进行适当的更改.在调用此方法时,将更新活动的Resources对象以根据新配置返回资源,这样您就可以轻松重置UI的元素,而无需系统重新启动您的活动.

...