문제

는 방법을 사용하지 않도록 설정할 수 있습니 풍경 모드의 어떤 전망에서 내 안드로이드 앱?

도움이 되었습니까?

해결책

추가하다 android:screenOrientation="portrait" AndroidManifest.xml의 활동에. 예를 들어:

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

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

  • 이것은 활동 수명주기 이벤트에 대해 생각하거나 상태를 올바르게 저장/복원하는 것에 대해 생각 해야하는 것은 아닙니다. 앱 회전 외에도 멀티 태스킹과 같은 피할 수없는 것들을 포함하여 활동 파괴/레크리에이션을 유발할 수있는 많은 것들이 있습니다. 지름길은 없습니다. 번들을 사용하는 법을 배우십시오 retainInstance 조각.
  • 상당히 균일 한 iPhone 경험과 달리 초상화가 명확하게 대중적인 방향이 아닌 장치가 있습니다. 사용자가 하드웨어 키보드 또는 게임 패드가있는 장치에있을 때는 Nvidia Shield가 크롬 북, 에 접기, 또는에 삼성 덱스, 강제 초상화는 앱 경험이 제한되거나 거대한 유용성을 번거롭게 만들 수 있습니다. 앱에 다른 오리엔테이션을 지원하는 부정적인 경험으로 이어질 강력한 UX 인수가 없다면 조경을 강요해서는 안됩니다. 저는 "이것은 고정 된 하드웨어 도크에 항상 사용되는 특정 태블릿 모델에 대한 금전 등록기 앱입니다."와 같은 것에 대해 이야기하고 있습니다.

따라서 대부분의 앱은 전화 센서, 소프트웨어 및 물리적 구성이 사용자가 앱과 상호 작용하는 방법에 대해 자체 결정을 내릴 수 있도록해야합니다. 그러나 기본 동작에 만족하지 않는다면 여전히 생각하고 싶을 수도 있습니다. sensor 사용 사례의 방향 :

  • 주된 관심사가 우연한 방향이 중간 활성이 변경되면 장치의 센서와 소프트웨어가 잘 대처하지 않을 것이라고 생각합니다 (예 : 틸트 기반 게임에서)는 풍경과 초상화 지원을 고려하지만 nosensor 방향을 위해. 이로 인해 대부분의 전화기에서 대부분의 태블릿과 인물 사진에 대한 조경을 강요하지만 대부분의 "일반적인"앱에 대해서는 여전히 권장하지 않습니다 (일부 사용자는 휴대 전화에 Landscape Softkeyboard를 입력하는 것을 좋아하고 많은 태블릿 사용자가 초상화를 읽고 읽습니다. 당신은 그들을 허락해야합니다).
  • 만약 너라면 아직 어떤 이유로 든 초상화를 강요해야합니다. sensorPortrait 보다 낫다 portrait Android 2.3+의 경우; 이것은 거꾸로 된 초상화를 허용하며, 이는 태블릿 사용에서 매우 일반적입니다.

다른 팁

나는 알지 못했다 AndroidManifest.xml 이 게시물을 읽을 때까지 파일 스위치, 그래서 내 앱에서 대신 사용했습니다.

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

이거 추가 해봐 android:screenOrientation="portrait" 이와 같이 활동을 선언하는 매니페스트 파일에서

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

Java 코드를 사용하려면 시도해보십시오

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

전화하기 전에 setContentView 활동 방법 onCreate().

이 도움을 바랍니다. 모두가 쉽게 이해할 수 있습니다 ...

여기에 많은 답변이 사용하도록 제안합니다. "portrait" AndroidManifest.xml 파일에서 이것은 좋은 해결책처럼 보일 수 있지만 문서에서 언급했듯이, 당신은 풍경 만있는 장치를 단독으로 만들고 있습니다. 또한 적절한 방향을 얻지 않고 초상화에 들어가도록 특정 장치 (조경에서 가장 잘 작동하는 특정 장치)를 강요하고 있습니다.

내 제안은 사용하는 것입니다 "nosensor" 대신에. 이렇게하면 장치가 기본 선호 방향을 사용하여 기본 선호 방향을 사용하고 Google Play에서 구매/다운로드를 차단하지 않으며 센서가 (NDK) 게임을 엉망으로 만들지 않도록합니다.

사용자 설정을 원한다면

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

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

타이머가 화면의 내용에 해당해야하며 화면을 회전하면 현재 활동이 파괴 되므로이 문제가 필요합니다.

매니페스트 에이 줄처럼 추가하십시오

Android : Screenorientation = "초상화"

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

    <uses-sdk
        android:minSdkVersion="8" />

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

        <activity
            android:name="MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

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

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

    </application>

</manifest>   

이것을 활동의 oncreate ()에 사용하십시오

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

활동 태그 에이 속성을 추가하십시오.

 android:screenOrientation="portrait"

각 행위의 각 행사 진입에 더 나은 오리엔테이션을 추가하는 번거 로움을 겪고 싶지 않다면, '활동 대신 응용 프로그램의 모든 활동에 의해 상속되는 Baseactivity 클래스 ('활동 '또는'AppCompatactivity ')를 작성하십시오. '또는'appcompatactivity '와 Baseactivity에 다음 코드를 추가하십시오.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}

당신은 변경해야합니다 android:screenOrientation="sensorPortrait" AndroidManifest.xml에서

추가하다 android:screenOrientation="portrait" 활동에 조경 모드를 비활성화하려고합니다.

비활성화하려는 경우 Landscape mode for your android app (또는 단일 활동) 추가하기 만하면됩니다.

android:screenOrientation="portrait" 활동 태그에 AndroidManifest.xml 파일.

처럼:

<activity android:name="YourActivityName" 
    android:icon="@drawable/ic_launcher" 
    android:label="Your App Name" 
    android:screenOrientation="portrait">

또 다른 방법, 프로그래밍 방식 접근.

이 작업을 프로그래밍 방식으로하고 싶다면 즉. Java 코드 사용. 조경 모드에 표시되지 않으려는 활동의 Java 클래스에서 아래 코드를 추가하여 그렇게 할 수 있습니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

자세한 내용은 여기를 방문 할 수 있기를 바랍니다. 여기에 링크 설명을 입력하십시오

일부 관점에서 방향을 변경하는 방법

전체 활동의 방향을 잠그는 대신이 클래스를 사용하여 실용적으로 귀하의 관점에서 동적으로 잠글 수 있습니다.

당신의 견해를 만드십시오 풍경

OrientationUtils.lockOrientationLandscape(mActivity);

당신의 견해를 만드십시오 초상화

OrientationUtils.lockOrientationPortrait(mActivity);

터놓다 정위

OrientationUtils.unlockOrientation(mActivity);

오리엔테이션 util 클래스

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;

/*  * This class is used to lock orientation of android app in nay android devices 
 */

public class OrientationUtils {
    private OrientationUtils() {
    }

    /** Locks the device window in landscape mode. */
    public static void lockOrientationLandscape(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    /** Locks the device window in portrait mode. */
    public static void lockOrientationPortrait(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    /** Locks the device window in actual screen mode. */
    public static void lockOrientation(Activity activity) {
        final int orientation = activity.getResources().getConfiguration().orientation;
        final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                .getRotation();

        // Copied from Android docs, since we don't have these values in Froyo
        // 2.2
        int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
        int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

        // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
        if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
            SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
        }

        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
        } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
        }
    }

    /** Unlocks the device window in user defined screen mode. */
    public static void unlockOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }

}

사용

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" 

각 활동의 방향을 설정해야합니다.

<activity
                android:name="com.example.SplashScreen2"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Registration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.Verification"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.WelcomeAlmostDone"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                android:name="com.example.PasswordRegistration"
                android:label="@string/app_name"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Black.NoTitleBar" >
            </activity>

oncreate () 메소드 내부에 클래스를 추가하십시오

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

사용중인 경우 Xamarin C# 이러한 솔루션 중 일부는 작동하지 않습니다. 여기에 내가 찾은 해결책이 있습니다.

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

클래스는 다른 솔루션과 유사하게 잘 작동하며 전 세계적으로 적용되지 않으며 각 활동 헤더에 배치해야합니다.

할 수 있는 힘의 특정 활동을 항상 유지 초상화 모드를 작성하여 이에 manifest.xml

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

하도록 설정할 수도 있습니다 당신의 활동에 남아 postrait 모드를 작성하여 다음 줄에서 활동의 onCreate()메서드

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}
<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity android:name=".MyActivity" 
                android:screenOrientation="portrait" 
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>

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

트릭은 먼저 프로젝트에 응용 프로그램 서브 클래스를 포함시키는 것입니다. 앱이 처음 시작될 때 호출 된 oncreate ()에서 ActivityLifeCycleCallbacks 개체 (API 레벨 14+)를 등록하여 활동 라이프 사이클 이벤트에 대한 알림을받습니다.

이를 통해 앱의 활동이 시작되거나 중지되거나 재개 될 때마다 자신의 코드를 실행할 수 있습니다. 이 시점에서 새로 생성 된 활동에서 setRequestedorientation ()을 호출 할 수 있습니다.

Manifest 파일에서 앱을 추가하는 것을 잊지 마십시오 : 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);
            }
            ....
        });
    }
}

에서 <apphome>/platform/android 디렉토리가 생성되었습니다 AndroidManifest.xml (생성 된 것을 복사). 그런 다음 추가하십시오 android:screenOrientation="portrait"모든 활동 요소에.

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="in.co.nurture.bajajfinserv">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

속성 또는 Android : Screenorientation을 사용하여 초상화 또는 조경 모드에서 활동을 제한 할 수 있습니다.

우리가 내 프로그램에 둘 이상의 활동이 있다면, 당신은 어떤 모드에서도 활동 중 하나를 제한 할 자유가 있으며 원하지 않는 다른 사람에게는 영향을 미치지 않습니다.

추가하다 android:screenOrientation="portrait" 안에 AndroidManifest.xml 파일.

예를 들어 :

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

아래 추가 프로젝트에 대한 칭찬,

NPM 설치

NPM I 반응-신용 지향적 인 잠금 장치

그런 다음 Manifest 클래스를 사용합니다.React_native (프로젝트 폴더)/ Android/app/src/main/androidmanifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<application
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:allowBackup="false"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

감사합니다!

Kotlin에서는 아래를 사용하여 프로그램적으로 달성 할 수 있습니다

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

그것은 나를 위해 일했고, AndroidManifest 파일 에이 코드를 추가하려고 노력하십시오.

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme">
        ....
        ....
        </application>

매니페스트 클래스에서.

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

또는 프로그래밍 방식으로

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

메모 : 전에 전화해야합니다 setContentView 활동 방법 onCreate().

다른 사람을 돕기 위해 AndroidManifest.xml의 활동에 대한 다음 속성 만 있으면됩니다.

안드로이드 : configchanges = "오리엔테이션"

따라서 전체 활동 노드 :

<activity android:name="Activity1" 
    android:icon="@drawable/icon" 
    android:label="App Name" 
    android:configChanges="orientation">

첫 번째 장치 방향 상태와 관련된 활동이있는 경우 현재 장치 방향을 onCreate 방법을 고정 한 다음 영원히 고정하십시오.

        int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();

        if(deviceRotation == Surface.ROTATION_0) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_180)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_90)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(deviceRotation == Surface.ROTATION_270)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top