programing

Android에서 가로 모드를 비활성화하는 방법은 무엇입니까?

nasanasas 2020. 9. 28. 09:16
반응형

Android에서 가로 모드를 비활성화하는 방법은 무엇입니까?


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


android:screenOrientation="portrait"AndroidManifest.xml의 활동에 추가하십시오 . 예를 들면 :

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

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

  • 이것은 활동 라이프 사이클 이벤트 또는 상태를 적절하게 저장 / 복원하는 것에 대해 생각할 필요가 없습니다. 멀티 태스킹과 같은 피할 수없는 일을 포함하여 활동 파괴 / 재 작성을 트리거 할 수있는 앱 순환 외에도 많은 것들이 있습니다. 바로 가기가 없습니다. 번들과 retainInstance조각 을 사용하는 방법을 배웁니다 .
  • 상당히 균일 한 iPhone 환경과 달리 세로 방향이 분명하게 인기있는 방향이 아닌 일부 장치가 있습니다. 사용자가 Nvidia Shield, Chromebook , 폴더 또는 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) 게임을 엉망으로 만들지 않습니다.


사용자 설정을 원하면

그럼 나는 추천합니다 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

타이머가 화면에있는 내용과 일치해야하고 화면을 회전하면 현재 활동이 파괴되기 때문에 필요합니다.


Manifest에 Like this Line을 추가하십시오.

android : screenOrientation = "portrait"

<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"

활동의 각 매니페스트 항목에 방향을 더 잘 추가하는 번거 로움을 겪고 싶지 않다면 'Activity'대신 애플리케이션의 모든 활동에 상속 될 BaseActivity 클래스 ( 'Activity'또는 '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);

오리엔테이션 유틸리티 클래스

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>

활동의 onCreate () 메서드에 다음 줄을 작성하여 활동이 postrait 모드로 유지되도록 할 수도 있습니다.

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

}

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

트릭은 먼저 프로젝트에 Application 하위 클래스를 포함하는지 확인하는 것입니다. 앱이 처음 시작될 때 호출되는 onCreate ()에서 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);
            }
            ....
        });
    }
}

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

<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>

Add below commend on your project,

npm install

npm i react-native-orientation-locker

then you use manifest class like, React_Native (Your Project Folder)/ 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>

Thank You!


In hopes to help someone else, the following attribute on the ACTIVITY in AndroidManifest.xml is all you need:

android:configChanges="orientation"

So, full activity node:

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

if your activity related to the first device orientation state,get the current device orientation in the onCreate method and then fix it forever:

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

In kotlin same can be programatically achieved using below

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

It worked for me, Try to add this code in AndroidManifest file

<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>

Either in manifest class.

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

or programmatically

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Note : you should call this before setContentView method for your activity in onCreate().

참고URL : https://stackoverflow.com/questions/582185/how-to-disable-landscape-mode-in-android

반응형