source

안드로이드에서 가로 모드를 비활성화하려면 어떻게 해야 합니까?

lovecheck 2023. 6. 1. 22:48
반응형

안드로이드에서 가로 모드를 비활성화하려면 어떻게 해야 합니까?

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

더하다android:screenOrientation="portrait"Android Manifest.xml 파일입니다.예:

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

이것이 매우 인기 있는 대답이 되었기 때문에, 저는 초상화를 강요하는 것이 그것이 자주 적용되는 문제들에 대한 올바른 해결책이 거의 없기 때문에 매우 죄책감을 느낍니다.
강제 초상화에 대한 주요 경고:

  • 그렇다고 해서 활동 수명 주기 이벤트나 상태 저장/복원에 대해 생각해야 하는 것은 아닙니다.앱 회전 외에도 멀티태스킹과 같은 피할 수 없는 것들을 포함하여 활동 파괴/재창조를 촉발할 수 있는 많은 것들이 있습니다.가기는 . 및 바로가없다니 . 번들을 사용하는 방법을 배웁니다.retainInstance단편적인 것
  • 상당히 균일한 아이폰 경험과 달리, 초상화가 분명히 인기 있는 방향이 아닌 일부 장치가 있다는 것을 명심하십시오.사용자가 Nvidia Shield와 같은 하드웨어 키보드나 게임 패드가 있는 장치, Chromebook, 접이식 또는 Samsung DeX에서 세로쓰기를 강제할 경우 앱 경험이 제한되거나 사용성이 크게 저하될 수 있습니다.앱에 다른 방향을 지원하는 부정적인 경험으로 이어질 수 있는 강력한 UX 인수가 없으면 배경을 강요해서는 안 됩니다.저는 "이것은 고정된 하드웨어 독에서 항상 사용되는 특정 모델의 태블릿에 대한 금전 등록 앱"과 같은 것들에 대해 말하고 있습니다.

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

  • 가 잘것으로 으로 방향이 변경되는 틸트 에서) 세로를 하는 것을 고려합니다. 사용하는 것이 좋습니다.nosensor오리엔테이션을 위해이로 인해 대부분의 태블릿에서 가로 방향과 세로 방향이 강제로 설정되지만, 여전히 대부분의 "일반" 앱에서는 권장하지 않습니다(일부 사용자는 휴대폰에서 가로 방향 소프트키보드를 입력하기를 좋아하고 많은 태블릿 사용자는 세로 방향으로 읽습니다).
  • 만약 당신이 여전히 어떤 이유로 초상화를 강요해야 한다면,sensorPortrait 을수있다니습도보다 나을 수 .portraitAndroid 2.3(Gingerbread) 이상의 경우, 태블릿 사용에서 매우 일반적인 뒤집기 초상화를 사용할 수 있습니다.

나는 그것을 알지 못했습니다.AndroidManifest.xml을 전환하기 에서는 대신 이것을 했습니다.: 게 시 물 을 읽 때 전 앱 대 사 습 했 니 용 다 신 서 에 이 여 하 환 을 파 일 지 까 을 니 ▁file 다 습 ▁this

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"이렇게 기본 방향을 할 수 Play에서 를 차단하지 않으며, 가 게임이렇게 하면 장치가 기본 기본 설정 방향을 사용할 수 있고, Google Play에서 구입/다운로드를 차단하지 않으며, 센서가 게임(NDK)을 망치지 않도록 합니다.

비활성화(또는 단일 활동)하려면 다음을 추가하기만 하면 됩니다.

android:screenOrientation="portrait" 파일의 활동 태그로 이동합니다.

예:

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

또 다른 방법은 프로그래밍 방식입니다.

Java 코드를 사용하여 프로그래밍 방식으로 이 작업을 수행하려는 경우가로 모드로 표시하지 않을 활동의 Java 클래스에 다음 코드를 추가하면 됩니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

매니페스트에 이 행을 추가하기만 하면 됩니다.

android:screenOrientation="portrait"

예:

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

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

타이머가 화면에 표시되는 내용과 일치해야 하고 화면을 돌리면 현재 작업이 삭제되기 때문에 이 작업이 필요합니다.

모든 활동을 공통 기본 클래스로 확장할 필요 없이 전체 응용프로그램에 대해 이 작업을 수행할 수 있습니다.

중요한 것은 먼저 프로젝트에 응용프로그램 하위 클래스를 포함하는 것입니다.앱이 처음 시작될 때 호출되는 its 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);
            }
            ....
        });
    }
}

활동의 작성()에 이 정보를 사용합니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

은 변해야합니다경▁change▁should를 바꿔야 합니다.android:screenOrientation="sensorPortrait" AndroidManifest.xml

이 속성을 활동 태그에 추가하기만 하면 됩니다.

 android:screenOrientation="portrait"

활동의 각 매니페스트 항목에 방향을 추가하는 번거로움을 겪지 않으려면 '활동' 또는 'AppCompatActivity' 대신 응용프로그램의 모든 활동에 상속될 BaseActivity 클래스('Activity' 또는 'AppCompatActivity' 상속)를 만들고 다음 코드를 기본 활동에 추가합니다.

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

더하다android:screenOrientation="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>

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

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

클래스 위에서는 다른 솔루션과 유사하게 잘 작동합니다.또한 전역적으로 적용할 수 없으므로 각 활동 헤더에 배치해야 합니다.

당신의 매니페스토에 넣어보세요.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="sensorPortrait" />

방향은 세로 방향이지만 사용자의 전화기가 거꾸로 되어 있으면 올바른 방향으로 표시됩니다. (따라서 화면이 180도 회전합니다.)


활동이 다중 창 모드에서 실행 중인 경우 시스템은 이 특성을 무시합니다.

더 보기: https://developer.android.com/guide/topics/manifest/activity-element

oncreate() 메서드 내에 클래스를 추가합니다.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

manifest.xml 파일에 다음과 같이 기록하여 특정 활동을 항상 세로 모드로 유지할 수 있습니다.

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

또한 활동의 작성() 방법에 다음 행을 작성하여 활동을 세로 모드로 유지할 수 있습니다.

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

매니페스트 클래스 중 하나:

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

또는 프로그래밍 방식:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

참고: 이전에 전화해야 합니다.setContentView당의활에서 onCreate().

<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity
                android:name=".MyActivity"
                android:screenOrientation="portrait"
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>
<?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.

프로그램에 두 개 이상의 활동이 있는 경우, 모드를 사용하여 다른 활동을 제한할 수 있으며, 이는 결코 원하지 않는 다른 활동에 영향을 미치지 않습니다.

아래 명령을 프로젝트에 추가합니다.

npm install

npm i react-native-orientation-locker

그런 다음 React_Native(당신의 프로젝트 폴더)/android/app/src/main/AndroidManifest.xml과 같은 매니페스트 클래스를 사용합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.payroll_react">

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

</manifest>

<apphome>/platform/android " " ", "AndroidManifest.xml(생성된 항목에서 해당 항목을 선택합니다.

그 다음 추가android:screenOrientation="portrait"모든 활동 요소에 적용됩니다.

더하다android:screenOrientation="portrait"AndroidManifest.xml 파일에 있습니다.

예:

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

그것은 나에게 효과가 있었다.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>

AndroidManifest.xml활동에 대한 다음 특성만 있으면 됩니다.

android:configChanges="orientation"

전체 활동 노드:

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

Kotlin에서는 다음을 사용하여 프로그래밍 방식으로 동일한 작업을 수행할 수 있습니다.

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

이 첫 장치 방향 장치 을 활이첫번장방상관태경련된우현다가니방져옵향장을치재동와째향치▁the▁▁if▁get로 가져옵니다.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);
}

언급URL : https://stackoverflow.com/questions/582185/how-can-i-disable-landscape-mode-in-android

반응형