1

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

我有一些代码想法,所以我会解决我的问题,但无论如何我可以通过它检查onCreate()活动的屏幕方向,尽管我正在使用带有方向的 confidChanges ???

4

4 回答 4

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 . 
于 2013-06-10T06:06:15.680 回答
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;
    }
}
于 2013-06-10T06:06:27.877 回答
0

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

onConfigurationChanged(Configuration newConfig)并且,在运行活动时覆盖以处理方向变化

更新:
来自文档

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

于 2013-06-10T06:11:12.187 回答
0

请检查此项,它将检测屏幕方向,您无需在清单中提及它,您可以获得方向。

 OrientationEventListener _orientaion = new OrientationEventListener(
            MainActivity.this) {

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

我认为这会对你有所帮助。

于 2013-06-10T06:25:27.430 回答