현재 화면 방향을 얻으려면 어떻게해야합니까?


190

onCreate ()에서 활동을 다시 만들 때 세로 대 가로로로드 할 항목 사이를 전환 할 수 있도록 방향이 가로 방향 일 때 플래그를 설정하고 싶습니다. 내 레이아웃을 처리하는 레이아웃 랜드 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를 재정의하면 레이아웃 랜드 XML이 가로 방향으로로드되지 않습니다.

onCreate ()에서 장치의 현재 방향을 얻고 싶습니다. 어떻게 구할 수 있습니까?

답변:


475
Activity.getResources().getConfiguration().orientation

8
ORIENTATION_PORTRAIT 및 ORIENTATION_LANDSCAPE의 두 값만 제공합니다. ActivityInfo에서 네 가지 값을 모두 얻는 방법이 있습니까? (그것은 LANDSCAPE_REVERSE와 PORTRAIT_REVERSE이기도합니다)
HRJ

18
당신은 getWindowManager ()를 사용할 수 @HRJ getDefaultDisplay ()를 getRotation를 ()..
MKJParekh

24
getWindowManager (). getDefaultDisplay (). getRotation ()은 디스플레이의 "자연"방향을 참조하여 회전을 반환합니다. 즉, 태블릿의 경우 가로 모드에서 Surface.ROTATION_0을 반환하지만 휴대폰의 경우 동일한 값을 반환합니다. 초상화.
Zoltán

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

의 수퍼 클래스 thisContext


28

일부 장치에서는 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
}

1
getOrient.getWidth () 및 getOrient.getHeight ()는 현재 더 이상 사용되지 않습니다.
valerybodak

좀 더 자세하게 정답으로 표시해야합니다
Zapnologica

1
정답으로 표시되어야하며 모든 조건에서 가장 잘 작동합니다. 그러나 anivaler가 getActivity (). getWindowManager (). getDefaultDisplay (). getWidth () 및 getHeight ()는 더 이상 사용되지 않습니다. getSize (Point outsize)를 사용하십시오. 새 점 객체를 전달하는 데 사용할 수 있으며 x 및 y 멤버를 가져옵니다.
Mahendra Chhimwal

Point outSize = new point ()와 같습니다. getOrient.getSize (outSize); if (outSize.x == outSize.y) return SQUARE;
Mahendra Chhimwal

Configuration.ORIENTATION_SQUARE는 더 이상 사용되지 않으며 2013 년에 0으로 정의되었지만 3으로, Configuration.ORIENTIATION_UNDEFINED는 0으로 정의되었습니다. Cheers.
Dave

26
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;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
Andrey Syrokomskiy 2016 년

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

이 명령은 Portrait의 경우 int 값 1을, Landscape의 경우 2를 반환합니다


4

경우 사람이 얻을하고자하는 의미 (즉, 전달과 같은 방향 설명을 onConfigurationChanged(..)사람들과 reverseLandscape, sensorLandscape등), 간단하게 사용getRequestedOrientation()


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속성 의 설명서에 나열되어 있습니다 (가장 일반적으로 사용되는 값은 화면 방향이 변경 될 때 다시 시작되지 않도록하는 "방향"이고 키보드 가용성이 변경 될 때 다시 시작하지 않도록하는 "keyboardHidden"). 파이프로 분리하여 속성에 여러 구성 값을 선언 할 수 있습니다. 캐릭터.

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

그게 다야!!


0

해당 onConfigurationChanged 메소드를 대체하고 여전히 기본 작업을 수행하려는 경우 대체 메소드의 첫 번째 명령문으로 super.onConfigyrationChanged ()를 사용하는 것이 좋습니다.


0

나는 단지 당신 중 일부와 관련된 다른 대안을 제안하고 싶습니다 :

android:configChanges="orientation|keyboardHidden" 

삽입 할 레이아웃을 명시 적으로 선언 함을 의미합니다.

레이아웃 랜드 및 레이아웃 폴더 덕분에 자동 주입을 유지하려는 경우. onCreate에 추가하기 만하면됩니다.

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

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

여기에서는 전화 방향에 따라 작업 표시 줄을 표시하거나 표시하지 않습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.