버튼을 사용하여 프로그래밍 방식으로 화면 방향 변경


답변:


216

예, 구현 가능합니다!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

링크를 참조하십시오 :

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html


감사. 하지만이 기능은 루팅 된 기기에서 실행해야할까요? 내 휴대 전화에서는 작동하지 않지만 뿌리 태블릿에서는 작동하는 것 같습니다.
Sam

아니 그건 아니야 .. 사실 게시하기 전에 그 링크에서 코드를 테스트했습니다 .. 내 장치에서 작동했습니다 ..
Hariharan 2013-08-16

그래, 네 말이 맞아. 방금 다른 장치를 테스트했는데 잘 작동합니다. 음, 내 Samsung Galaxy Nexus가 작동하지 않습니다. 이유를 모릅니다.
Sam

4
답변 해주셔서 감사합니다. 그러나 이것은 해당 모드에서 응용 프로그램을 잠급니다. 사용자가 장치를 회전 할 때 화면이 회전하지 않습니다.
Eco4ndly

2
이 답변으로 프로그래밍 방식으로 방향을 가로로 설정하면 사용자는 더 이상 장치를 회전하여 방향을 변경할 수 없습니다. 이 문제를 처리 할 방법이 있습니까? 이 답변에서 배운 것을하고 싶지만 사용자가 장치를 회전하면 방향이 계속 변경됩니다.
Soon Santos

36

예, 다음을 사용하여 언제든지 프로그래밍 방식으로 화면 방향을 설정할 수 있습니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

가로 및 세로 모드 각각. setRequestedOrientation () 메서드 는 Activity 클래스 에 사용할 수 있으므로 Activity 내에서 사용할 수 있습니다.

그리고 이것은 현재 화면 방향을 가져 오고 현재 상태에 따라 적절하게 설정하는 방법입니다.

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

여기에서 가져온 것 : http://techblogon.com/android-screen-orientation-change-rotation-example/

편집하다

또한 다음을 사용하여 화면 방향을 가져올 수 있습니다 Configuration.

Activity.getResources().getConfiguration().orientation

3
getRequestedOrientation()현재 화면 방향을 얻기 위해 사용 하는 것이 좋습니다 . stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()UNSPECIFIED앱을 시작할 때 제공합니다 . 그래서 위의 청취자와 함께 화면을 변경하지 않습니다 당신이 추가하면 UNSPECIFIED받는 사람 switch이 하나의 화면을 두어야 세로 / 가로 첫 번째 위치.
mortalis

22

가능하면 SCREEN_ORIENTATION_LANDSCAPE 또는 SCREEN_ORIENTATION_PORTRAIT를 사용하지 마십시오. 대신 다음을 사용하십시오.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

이를 통해 사용자는 장치를 가로 방향 또는 세로 방향으로 각각 설정할 수 있습니다. 충전 케이블을 뱃속으로 꽂은 상태에서 게임을 해본 적이 있다면 두 방향을 모두 사용할 수있는 것이 사용자에게 중요한 이유를 정확히 알 수 있습니다.

참고 : 내가 확인한 휴대 전화의 경우 '오른쪽 위로'세로 모드 만 허용되지만 SENSOR_PORTRAIT는 태블릿에서 제대로 작동합니다.

참고 :이 기능은 API 레벨 9에서 도입되었으므로 8 이하를 지원해야하는 경우 (현재로서는 불가능) 대신 다음을 사용하십시오.

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

19

이를 사용하여 화면 방향을 설정합니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

또는

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

그리고 이것을 매니페스트에 추가하는 것을 잊지 마십시오.

android:configChanges = "orientation"

2
둘 다 필요합니다 "orientation|screenSize". 여기를보세요 : developer.android.com/guide/topics/resources/…
Benny

7

작동 코드 :

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

버튼 클릭에서이 메서드를 호출

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