Androidで横向きモードを無効にする方法は?


933

Androidアプリの一部のビューで横向きモードを無効にするにはどうすればよいですか?


3
あなたは本質的に自動回転機能を無効にしようとしていますか?ポートレートビューで好みの方向を設定してみてください。http://code.google.com/android/reference/android/R.styleable.html#AndroidManifestActivity_screenOrientation
adam

回答:


1633

android:screenOrientation="portrait"AndroidManifest.xmlのアクティビティに追加します。例えば:

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

編集:これは非常に人気のある回答になっているので、ポートレートを強制することが頻繁に適用される問題の正しい解決策であることはめったにないので、私は非常に罪悪感を感じます。
強制的な肖像画に関する主な警告:

  • これは、アクティビティのライフサイクルイベントについて考えたり、状態を適切に保存/復元したりすることを免れません。アプリのローテーション以外にも、マルチタスクなどの不可避なものを含め、アクティビティの破棄/再作成をトリガーできるものはたくさんあります。ショートカットはありません。バンドルとretainInstanceフラグメントの使い方を学びます。
  • かなり統一されたiPhoneエクスペリエンスとは異なり、縦向きが明らかに一般的な向きではないデバイスがいくつかあることに注意してください。ユーザーがハードウェアキーボードまたはゲームパッドを搭載したデバイスでNvidiaシールド、Chromebook折りたたみ式、またはSamsung DeXを使用している場合、ポートレートを強制すると、アプリのエクスペリエンスが制限されたり、使い勝手が非常に面倒になったりします。アプリに、他のオリエンテーションをサポートするためのネガティブエクスペリエンスにつながる強力なUX引数がない場合は、おそらくランドスケープを強制しないでください。「これは、固定ハードウェアドックで常に使用されるタブレットの特定のモデル用のキャッシュレジスタアプリです」のようなことについて話している。

そのため、ほとんどのアプリでは、ユーザーがアプリとどのようにやり取りしたいかについて、電話のセンサー、ソフトウェア、および物理的な構成が独自に決定できるようにする必要があります。ただし、sensorユースケースでのオリエンテーションのデフォルトの動作に満足できない場合でも、いくつかのケースについて検討する必要があります。

  • 主な懸念事項が、デバイスのセンサーとソフトウェアがうまく対応していないと思われるアクティビティ中の偶発的な向きの変更である場合(たとえば、傾斜ベースのゲーム)、横向きと縦nosensor向きをサポートすることを検討しますが、向きには使用します。これにより、ほとんどのタブレットでは横向きになり、ほとんどのスマートフォンでは縦向きになりますが、ほとんどの「通常の」アプリではこれをお勧めしません(一部のユーザーは自分の電話で横向きソフトキーボードを入力したいだけで、多くのタブレットユーザーは縦向きで読みます)。それらを許可する必要があります)。
  • あなたがいる場合、まだいくつかの理由で力の肖像画に必要な、sensorPortraitより良いよりかもしれportraitアンドロイド2.3以降のために、これにより、タブレットを使用する場合によくある逆さまの縦向きが可能になります。

54
アプリ全体で行うことが可能です。このチェックアウトstackoverflow.com/a/9784269/1300707
リアム・ジョージBetsworth

1
別のポートレートがあることに気づきました:sensorPortait。sensorPortaitとportraitの違いは何ですか?
Jacky

1
Googleのドキュメントを読んだ場合:「縦向きですが、デバイスセンサーに基づいて縦向きまたは逆向きにすることができます。APIレベル9で追加されました。」つまり、つまり、「縦向き、上向きまたは下向き、Android 2.3以降のみ」です。
Yoni Samlan 2013

2
以下の私の回答で述べたように、いくつかの問題を回避するには、「nosensor」がより良いオプションである可能性があります。
Mike Weir

1
私は同意しないと言わざるを得ません。すべてのエクスペリエンスが電話のランドスケープモードと互換性があるわけではないため、センサーではなくUXに決定させる必要があります。しかし、これはタブレットには当てはまりません。
Renzo Tissoni

110

私はAndroidManifest.xmlこの投稿を読むまでファイルの切り替えに気付かなかったので、私のアプリでは代わりにこれを使用しました:

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

9
これにより、デバイスが指定された方向にない場合、最初のロードでアクティビティがジャンプする可能性があります。
通り

このメソッドを使用していて、OnCreateでこのメソッドを呼び出していたため、一部のアセットファイルからデータを読み取っていました。デバイスを横向きにしてアプリを起動すると、アプリは回転しますが、これにより、何らかの奇妙な理由で、これらの初期化アセットが誤って読み取られます(おそらく、回転が完了するまで待つ必要があります)。代替XMLを使用しても、この問題は発生しませんでした。
Radu Simionescu 2014年

1
Androidプログラムの起動シーケンスに問題がある可能性があります。setRequestedOrientation()をonResume()に移動してみては???
リッチ

45

これandroid:screenOrientation="portrait"をマニフェストファイルに追加し、このようにアクティビティを宣言します

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

Javaコードを使用したい場合は、

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

でのsetContentViewアクティビティのメソッドを呼び出す前onCreate()

このヘルプとすべての人にとって簡単に理解できることを願っています...


29

ここでの回答の多くは、"portrait"AndroidManifest.xmlファイルでの使用を提案しています。これは良い解決策のように思えるかもしれませんが、ドキュメントに記載されているように、ランドスケープしかないデバイスを選択しています。また、特定のデバイス(横向きで最適に機能するデバイス)を縦向きにして、正しい向きにしないように強制しています。

私の提案は"nosensor"代わりに使用することです。これにより、デバイスはデフォルトの優先方向を使用し、Google Playでの購入/ダウンロードをブロックせず、センサーが(私の場合はNDK)ゲームを台無しにしないようにします。


多くの人がこれに賛成票を投じているので、特定のあいまいなデバイスが実際にアプリ内画面の回転を実装したいときに予期せず応答するので、「ポートレート」を示唆する他の回答を行ってきたことを指摘しておきます。後で私のための要件。また、「portrait」を備えたアプリがGoogle Playのセットアップによってブロックされることも疑います。
Mike Weir

Google Playは実際に、横向きのみのデバイスで縦向きのみのアプリを除外します。このページのメモを参照してください:developer.android.com/guide/topics/manifest/…( "宣言した値は、Googleなどのサービスによるフィルタリングを有効にしますPlay ")
miracle2k 2017

14

ユーザー設定が必要な場合は、

それから私はお勧めします setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

設定メニューから設定を変更できます。

私のタイマーは画面上のものに対応している必要があり、画面を回転すると現在のアクティビティが破壊されるため、これが必要です。


14

マニフェストにLike this Lineを追加するだけです

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>   

9

すべてのアクティビティで共通の基本クラスを拡張する必要なく、アプリケーション全体でこれを行うことができます。

秘訣は、まずプロジェクトに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);
            }
            ....
        });
    }
}

7

これをアクティビティのonCreate()で使用します

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

7

android:screenOrientation="sensorPortrait"AndroidManifest.xmlで変更する必要があります



6

アクティビティの各マニフェストエントリに向きを追加する手間を省きたい場合は、「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......
}

5

android:screenOrientation="portrait"横向きモードを無効にするアクティビティに追加します。


5

無効にするLandscape mode for your android app(または1つのアクティビティ)必要がある場合は、追加するだけです。

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

私はそれがあなたを助けることを願っています。詳細については、ここアクセスすることができますここにリンクの説明を入力してください


2
非常に多くの答えが助言を与えるので@Phoenixと@Yoniの良いアドバイスが、私は良い一番下の行は繰り返すことだと思い矛盾彼らが提案する何ということ:android:screenOrientation="nosensor">
DSlomer64

1
@ DSlomer64はい。タブレットデバイスに対応したい場合は、代わりにnosensor値を使用する必要があります
IntelliJ

5

一部のビューで方向を変更する方法

アクティビティ全体の向きをロックする代わりに、このクラスを使用して、実際のビューから向きを動的にロックできます:-

ビューを横向きにする

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

}

4

使用する

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

4

各アクティビティの向きを設定する必要があります。

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

4

oncreate()メソッド内にクラスを追加する

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

4

Xamarin C#を使用している場合、これらのソリューションの一部は機能しません。これが私が機能することがわかった解決策です。

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

上記のクラスは他のソリューションと同様にうまく機能しますが、グローバルに適用することもできず、各アクティビティヘッダーに配置する必要があります。


4

manifest.xmlに次のように記述することにより、特定のアクティビティを常に縦向きモードのままにすることができます。

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

アクティビティの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);

}

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

3

以下をプロジェクトに賞賛してください、

npmインストール

npm私はネイティブオリエンテーションロッカーを反応させます

次に、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>

ありがとうございました!


2

<apphome>/platform/android作成されたディレクトリ内AndroidManifest.xml(生成されたディレクトリからコピー)。次に、すべてのアクティビティ要素にandroid:screenOrientation=portrait」を追加します。


2
 <?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を使用して、縦向きまたは横向きのアクティビティを制限できます。

私たちのプログラムに複数のアクティビティがある場合、モードのいずれか1つでアクティビティのいずれか1つを制限する自由があり、不要な他のアクティビティには影響しません。


2

マニフェストクラスのいずれか。

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

またはプログラムで

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

注:でのsetContentViewアクティビティの before メソッドを呼び出す必要がありますonCreate()


2

AndroidManifest.xmlファイルに追加android:screenOrientation="portrait"します。

例えば ​​:

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

1

他の誰かを助けることを期待して、AndroidManifest.xmlのACTIVITYの次の属性で十分です。

android:configChanges = "orientation"

したがって、完全なアクティビティノード:

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

答えがたくさん残っています。より多くの情報を提供する必要があります。なぜ自分の答えを使用する必要があるのでしょうか。特にドキュメントはこのオプションを使用していないと言います:「注:この属性の使用は避けて、最後の手段としてのみ使用してください。構成変更による再起動を適切に処理する方法の詳細については、ランタイム変更の処理をお読みください。」developer.android.com/guide/topics/manifest/...
Murmel

1

kotlinでは、同じことをプログラム的に以下を使用して達成できます

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

1

それは私のために働きました、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>

アクティビティごとに設定する必要がないので、私は素晴らしいソリューションでした。残念ながら、私のアプリでは動作しません。
Myroslav Kolodii

1

マニフェストに入れてください。

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

向きは縦向きになりますが、ユーザーの電話が上下逆になっている場合でも、正しい方向が表示されます。(画面が180度回転します)。


アクティビティがマルチウィンドウモードで実行されている場合、システムこの属性を 無視します


0

最初のデバイスの向きの状態に関連するアクティビティの場合、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);
        }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.