如何获取当前的屏幕方向?

时间:2010-09-08 00:15:48

标签: java android configuration orientation

我只想在我的方向处于横向时设置一些标志,这样当在onCreate()中重新创建活动时,我可以在纵向和横向加载的内容之间切换。我已经有了一个处理我的布局的layout-land xml。

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

覆盖onConfigurationChanged将阻止我的layout-land xml以横向方向加载。

我只想在onCreate()中获取设备的当前方向。我怎么能得到这个?

9 个答案:

答案 0 :(得分:433)

Activity.getResources().getConfiguration().orientation

答案 1 :(得分:53)

int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

this的超类是Context

答案 2 :(得分:27)

在某些设备void onConfigurationChanged()可能会崩溃。用户将使用此代码获取当前屏幕方向。

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

并使用

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

答案 3 :(得分:22)

int rotation =  getWindowManager().getDefaultDisplay().getRotation();

这将提供正常和反向的所有方向

并像

一样处理它
int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

答案 4 :(得分:12)

getActivity().getResources().getConfiguration().orientation

此命令返回纵向的值1和纵向的

的2

答案 5 :(得分:5)

如果有人希望获得meaningful方向说明(例如与onConfigurationChanged(..)reverseLandscape等传递给sensorLandscape的说明),只需使用{{3 }}

答案 6 :(得分:1)

在您的活动类中,使用以下方法:

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

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

然后,要声明您的活动处理配置更改,请编辑清单文件中的相应元素,以包含android:configChanges属性,其中包含表示要处理的配置的值。 android:configChanges属性的文档中列出了可能的值(最常用的值为&#34;方向&#34;以防止在屏幕方向更改时重新启动和&#34; keyboardHidden&#34;以防止重新启动当键盘可用性发生变化时)。您可以通过使用管道分隔属性来声明属性中的多个配置值字符。

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

那就是!!

答案 7 :(得分:0)

如果你想覆盖那个onConfigurationChanged方法并仍然希望它做基本的东西,那么考虑使用super.onConfigyrationChanged()作为overriden方法中的第一个语句。

答案 8 :(得分:0)

我只想提出另一个与您有关的替代方案:

android:configChanges="orientation|keyboardHidden" 

意味着我们明确声明要注入的布局。

如果要保留自动注入功能,请使用layout-land和layout文件夹。您所要做的就是将其添加到onCreate中:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

在这里,我们是否显示操作栏,具体取决于手机的方向