使用configChanges检查屏幕方向

时间:2013-06-10 06:02:39

标签: android screen-orientation android-orientation

我正在使用android:configChanges="orientation|keyboardHidden|screenSize",因此当屏幕旋转从横向更改为纵向时,活动不会再次启动,反之亦然。

我有一些代码的想法,所以我会解决我的问题,但是为了那个我可以检查活动的屏幕方向onCreate(),虽然我使用confidChanges方向???

4 个答案:

答案 0 :(得分:3)

使用Activity的onConfigurationChanged方法。请参阅以下代码:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
  }

您还必须编辑清单文件中的相应元素以包含android:configChanges只需看下面的代码:

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

注意:对于Android 3.2(API级别13)或更高版本,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您希望在开发API级别13或更高级别时由于方向更改而阻止运行时重新启动,则必须使用decalare

android:configChanges="orientation|screenSize" for API level 13 or higher . 

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以在任何地方使用getResources().getConfiguration().orientation来了解屏幕的方向。

并覆盖onConfigurationChanged(Configuration newConfig)以在运行活动时处理方向更改

<强>更新
来自documentation

  

在某些特殊情况下,您可能希望根据一种或多种配置更改绕过重新启动活动。这是通过其清单中的android:configChanges属性完成的。对于任何类型的配置更改,您说您在那里处理,您将收到对当前活动的onConfigurationChanged(配置)方法的调用,而不是重新启动。

答案 3 :(得分:0)

请检查一下它是否会检测到屏幕方向,您无需在清单中提及它就可以获得定向。

 OrientationEventListener _orientaion = new OrientationEventListener(
            MainActivity.this) {

        @Override
        public void onOrientationChanged(int arg0) {
            System.out.println("Wortking");
        }
    };
    _orientaion.enable();

我认为这会对你有帮助。