전체 응용 프로그램을 세로 모드로만 설정하는 방법은 무엇입니까?


201

응용 프로그램이 세로 모드로만 실행되도록 설정하려면 어떻게합니까? 응용 프로그램이 실행되는 동안 가로 모드를 비활성화하고 싶습니다. 프로그래밍 방식으로 어떻게합니까?

답변:


293

모든 안드로이드 버전

XML에서

android:screenOrientation="portrait"manifest.xml 파일에서 각 활동에 대해 지정할 수 있습니다 . application태그 에는이 옵션을 지정할 수 없습니다 .

자바에서

다른 옵션은 프로그래밍 방식으로 수행하는 것입니다 (예 Activity: 기본 클래스).

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Android 4 이상 (API 14 이상)

마지막 옵션은 Android 4.0 (API 14+) 이후에만 사용할 수있는 활동 라이프 사이클 리스너로 수행하는 것입니다. 모든 것은 커스텀 Application클래스 에서 발생합니다 :

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapter는 빈 구현이 될 생성해야 할 도우미 클래스 일뿐입니다 ActivityLifecycleCallbacks(따라서 단순히 인터페이스 중 하나가 필요할 때 해당 인터페이스의 모든 메소드를 재정의 할 필요는 없습니다).


1
그것은 작동하지 않습니다. 기기를 켜면 가로 모드로 전환됩니다. 그리고 코드에서 더 많은 것은이 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); 진행률 표시 줄에 대한 지침. 이 지침에 문제가 있습니까?
naresh

작동 중입니다. 코딩 부분에 두 가지 명령을 더 이상 넣지 마십시오. 센서가 화면 방향을 변경할 수 있도록합니다.
naresh

3
-1 : asker는 // 프로그래밍 방식으로 //하는 방법과 전체 응용 프로그램에 대해 구체적으로 요청했습니다.
jwir3

@ jwir3, 나는 동의하지 않습니다. "프로그래밍"은 코드 코드를 작성하는 것이 아니라 모든 메타 파일, 사용하는 리소스, IDE의 특유한 문제 등을 해결하는 것입니다. 원래 질문에 대한 충분한 답변입니다.
James Webster

9
LifeCycleCallbacks 방법을 사용하면 장치를 가로 모드 (보통 상태)로 유지할 때 활동 시작이 지연됩니다. 장치가 액티비티 사이의 가로 모드로 잠시 돌아가서 이것을 처리하는 데 시간이 필요하기 때문입니다. 매니페스트에서 방향을 설정해도이 효과는 없습니다.
익명 :

142

예, 프로그래밍 방식과 모든 활동 모두 에서이 작업을 수행하여 모든 활동이 확장되는 AbstractActivity를 만들 수 있습니다.

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

이 추상 활동은 글로벌 메뉴에도 사용할 수 있습니다.


3
참고 : ActivityInfo.SCREEN_ORIENTATION_NOSENSOR일부 장치에는 세로 방향이 없으므로 장치를 기본 상태로 유지하기 때문에 더 나은 대답이어야 한다고 생각합니다 . 그러나 'nosensor'는 저에게 효과적이지 않으므로 @arcone의 대답이 저를 의미합니다.
David Manpearl

104

모든 활동을 공통 기본 클래스로 확장 하지 않고도 전체 애플리케이션에 대해이를 수행 할 수 있습니다 .

트릭은 먼저 Application프로젝트에 서브 클래스 를 포함시키는 것 입니다. 에서 onCreate()앱이 처음 시작될 때 호출되는 ActivityLifecycleCallbacks활동 수명주기 이벤트 알림을 수신 하도록 객체 (API 레벨 14+)를 등록 합니다.

이렇게하면 때마다 자신의 코드를 실행할 수있는 기회를 제공합니다 모든 앱에서 활동이 시작 (또는 중지 또는 재개, 또는 무엇이든)됩니다. 이 시점 setRequestedOrientation()에서 새로 생성 된 활동을 호출 할 수 있습니다 .

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}

9
이것은 질문을 다루는 유일한 대답입니다. 그들을 모두 다스리는 한 줄.
사무엘

2
* 하나의 클래스는 그들을 모두 지배합니다.
Jay Mayu

3
그리고 매니페스트 응용 프로그램 루트를 추가하는 것을 잊지 마십시오. android : name = ". MyApp"
Faisal Naseer

2
이 접근법은 활동의 onCreate ()를 두 번 호출합니다.
Sandeep R

3
문제는 기기를 가로로 잡고 새로운 활동을 시작하면 가로 방향으로 표시되고 세로로 회전하는 것입니다. 세로 방향으로 전체 앱을 잠그는 유일한 방법은 매니페스트의 모든 활동성을 표시하는 것입니다.
Den

42

매니페스트 파일에서이를 설정할 수 있습니다.

android:name=".your launching activity name"
android:screenOrientation="portrait"

클래스 파일에 다음과 같이 코드를 작성하여 동일하게 달성 할 수도 있습니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

1
유 그것은 또한 당신의 등급을 경주 할 것이다 당신의 필요에 따라 모든 솔루션을 가지고있는 경우 @ 레쉬 pls는 ANS을 받아
SRAM

24

AndroidManifest.xml의 활동에 android : screenOrientation = "portrait"를 추가하십시오. 예를 들면 다음과 같습니다.

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

25
그는 APPLICATION이 활동하지 않았다고 말했다.
Reinherd

10

사용하다:

android:screenOrientation="portrait" 

세로 모드로만 표시하려는 각 활동의 응용 프로그램 매니페스트 파일에이 줄을 작성하십시오.


8

모든 활동에 대해 매니페스트 파일에 이것을 작성하십시오.

android:screenOrientation="portrait" 

2

안드로이드 개발자 가이드에서와 같이 :

"방향"화면 방향이 변경되었습니다. 사용자가 장치를 회전했습니다. 참고 : 애플리케이션이 API 레벨 13 이상 (minSdkVersion 및 targetSdkVersion 속성으로 선언 된대로)을 대상으로하는 경우 장치가 세로 방향과 가로 방향간에 전환 될 때도 변경되므로 "screenSize"구성도 선언해야합니다.

"screenSize"사용 가능한 현재 화면 크기가 변경되었습니다. 이것은 현재 종횡비를 기준으로 현재 사용 가능한 크기의 변화를 나타내므로 사용자가 가로와 세로를 전환 할 때 변경됩니다. 그러나 애플리케이션이 API 레벨 12 이하를 대상으로하는 경우 활동은 항상이 구성 변경을 처리합니다 (이 구성 변경은 Android 3.2 이상 디바이스에서 실행중인 경우에도 활동을 다시 시작하지 않습니다). API 레벨 13에 추가되었습니다.

따라서 AndroidManifest.xml 파일에서 다음을 넣을 수 있습니다.

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

1

추가 <preference name="orientation" value="portrait" />아래에 <widget>내 config.xml에이 나를 위해 일에.

(다른 솔루션은 내 장치에서 작동하지 않았거나 빌드 중에 덮어 쓰여졌거나 빌드 프로세스 중에 사용 중단 오류가 발생했습니다.)


상기 config.xml은 어디에 있습니까? 어떤 개발 플랫폼을 언급하고 있습니까?
Tash Pemhiwa

1

"세로" 에 사용하려는 활동을 매니페스트 파일 에서 활동 태그에이 코드를 작성해야합니다.

  android:screenOrientation="portrait" 

이처럼

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

하지만 가로로 화면을 원하면이 코드를 사용하십시오

android:screenOrientation="landscape"

1
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

0

궁금한 점이 있다면 Kotlin 에서 모든 활동을 공통 기본 클래스로 확장하지 않고도 전체 응용 프로그램 에서이 작업을 수행 할 수있는 방법 은 아래 예를 참조하십시오.

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

그런 다음 AndroidManifest에 공통 기본 클래스를 추가해야합니다.

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

0

두 가지 방법으로 할 수 있습니다.

  1. 추가 android:screenOrientation="portrait"대응 활동에 매니페스트 파일에
  2. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); `onCreate () 메소드에서 활동에 추가

0

Graham Borland 답변과 비슷하지만 원하지 않는 경우 응용 프로그램 클래스를 만들 필요가없는 것 같습니다 ... 프로젝트에서 기본 활동을 만드십시오.

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

Potrait 모드를 사용하려는 AppCompatActivity 대신이 클래스를 확장하십시오.

public class your_activity extends BaseActivity {}

0

Xamarin 사용자의 경우 :

모든 활동을 BaseActivity그냥 추가 로 확장하는 경우 :

this.RequestedOrientation = ScreenOrientation.Portrait;

문제가 해결됩니다. 특정 액티비티를 가로 방향으로 설정하려면에서를 무시하십시오 OnActivityCreated. 같이:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

-11

매니페스트에 다음을 입력하십시오.

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

6
이것은 3 살짜리 답변이 아직 말하지 않은 새로운 것을 추가하지 않습니다. 삭제를 고려할 수 있습니다. 답변을 다른 사람과 구별하는 추가 정보를 포함하도록 답변을 수정하기로 결정한 경우 @ 답장을 보내 주시기 바랍니다.
Artjom B.

1
안드로이드 : screenOrientation는 = "세로"응용 프로그램 태그에 추가 할 수 없습니다, 그것은 내부 활동 태그를 이동해야
호세인 아 미니
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.