안드로이드에서 가로 모드를 비활성화하는 방법은 무엇입니까? 앱에서 일부 뷰에

내 Android 앱에서 일부 뷰에 대해 가로 모드를 비활성화하려면 어떻게해야합니까?



답변

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

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

편집 : 이것은 매우 인기있는 답변이되었으므로 초상화를 강요하는 것이 자주 적용되는 문제에 대한 올바른 해결책이 거의 없기 때문에 매우 죄책감을 느낍니다.
강제 인물 사진의 주요 경고 사항 :

  • 이것은 활동 라이프 사이클 이벤트 또는 올바르게 저장 / 복원 상태에 대해 생각할 필요가 없습니다. 앱 회전 외에 멀티 태스킹과 같은 피할 수없는 것들을 포함하여 활동 파괴 / 재생을 유발할 수있는 많은 것들이 있습니다. 바로 가기가 없습니다. 번들과 retainInstance조각 을 사용하는 법을 배웁니다 .
  • 상당히 균일 한 iPhone 환경과 달리, 세로가 분명하게 인기가없는 일부 장치가 있습니다. 사용자가 Nvidia Shield, Chromebook , foldables 또는 Samsung DeX 와 같은 하드웨어 키보드 또는 게임 패드가있는 기기를 사용하는 경우 인물 사진을 강제로 사용하면 앱 사용 환경이 제한적이거나 사용이 불편할 수 있습니다. 앱에 다른 방향을 지원하는 데 부정적인 경험을하게하는 강력한 UX 인수가없는 경우 가로 방향을 강요해서는 안됩니다. “고정 하드웨어 도크에 항상 사용되는 특정 태블릿 모델의 금전 등록기 앱”과 같은 것에 대해 이야기하고 있습니다.

따라서 대부분의 앱은 휴대 전화 센서, 소프트웨어 및 물리적 구성이 사용자가 앱과 상호 작용하려는 방식에 대한 자체 결정을 내릴 수 있도록해야합니다. 그러나 sensor사용 사례에서 기본 방향 동작에 만족하지 않는 경우 몇 가지 경우를 계속 생각할 수 있습니다.

  • 주된 관심사가 실수로 방향이 바뀌는 경우 장치의 센서와 소프트웨어가 잘 맞지 않는다고 생각하는 활동 (예 : 틸트 기반 게임)에서 가로와 세로는 지원하지만 nosensor방향은 사용 하는 것이 좋습니다. 이렇게하면 대부분의 태블릿에서 가로 및 세로로 표시되지만 대부분의 “일반”앱에서는 권장하지 않습니다 (일부 사용자는 전화기에서 가로 소프트 키보드를 입력하고 많은 태블릿 사용자는 세로로 읽습니다). 당신이 그들을 보자).
  • 이 경우 여전히 어떤 이유로 힘 초상화에 필요한, sensorPortrait보다 나은 수 있습니다 portrait안드로이드 2.3에 대한; 이렇게하면 거꾸로 된 인물 사진을 볼 수 있으며 태블릿 사용시 일반적입니다.

답변

AndroidManifest.xml이 게시물을 읽을 때까지 파일 스위치를 알지 못했기 때문에 내 앱에서 대신 이것을 사용했습니다.

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation

답변

다음 android:screenOrientation="portrait"과 같이 활동을 선언하는 매니페스트 파일에 이것을 추가하십시오.

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

자바 코드를 사용하려면

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

문의하기 전에 setContentView당신의 활동 방법을 onCreate().

이 도움이 되길 바랍니다.


답변

여기에 많은 답변이 "portrait"AndroidManifest.xml 파일에서 사용하도록 제안 합니다. 이것은 좋은 솔루션처럼 보일 수 있지만 설명서에서 언급했듯이 가로 만있는 장치를 싱킹하고 있습니다. 또한 올바른 방향이 아닌 특정 장치 (가로에서 가장 잘 작동하는)가 세로로 들어가도록 강요하고 있습니다.

내 제안은 "nosensor"대신 사용하는 것입니다. 그러면 기기가 기본 선호 방향을 사용하고 Google Play의 구매 / 다운로드를 차단하지 않으며 센서가 (내 경우에는 NDK) 게임을 망칠 수 없습니다.


답변

매니페스트에 다음과 같이이 라인을 추가하십시오.

android : screenOrientation = “세로”

<manifest
    package="com.example.speedtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >


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

    </application>

</manifest>   

답변

사용자 설정을 원한다면

그런 다음 추천합니다 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

설정 메뉴에서 설정을 변경할 수 있습니다.

타이머가 화면의 내용과 일치해야하기 때문에이 작업이 필요하며 화면을 회전하면 현재 활동이 파괴됩니다.


답변

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

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

이를 통해 앱의 활동이 시작 (또는 중지, 재개 또는 기타) 될 때마다 자신의 코드를 실행할 수 있습니다. 이 시점에서 새로 작성된 활동에 대해 setRequestedOrientation ()을 호출 할 수 있습니다.

매니페스트 파일에 app : name = “. MyApp”을 추가하는 것을 잊지 마십시오.

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);
            }
            ....
        });
    }
}