web-dev-qa-db-ja.com

Androidでランドスケープモードを無効にしますか?

Androidアプリの一部のビューでランドスケープモードを無効にするにはどうすればよいですか。

865
lostInTransit

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

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

編集:これは非常に人気のある答えになったので、ポートレートを強制することは頻繁に適用される問題の適切な解決策となることはめったにないので、私は非常に罪悪感を覚えます。
ポートレートの強制に関する主な注意点:

  • これにより、アクティビティのライフサイクルイベントを考慮したり、状態を適切に保存/復元したりする必要がなくなります。マルチタスクのような避けられないものを含め、アクティビティの破壊/レクリエーションを引き起こす可能性のあるアプリのローテーション以外にもたくさんのものがあります。ショートカットはありません。バンドルとretainInstanceフラグメントの使用方法を学びます。
  • かなり均一なiPhoneエクスペリエンスとは異なり、ポートレートが明らかに人気のある方向ではないデバイスがいくつかあることに留意してください。 Nvidiaシールドのようなハードウェアキーボードまたはゲームパッドを備えたデバイスを使用している場合、- Chromebooksfoldables 、または Samsung DeX 、強制ポートレートは、アプリのエクスペリエンスを制限したり、使いやすさを大幅に向上させたりします。アプリに、他の方向をサポートするためのネガティブなエクスペリエンスにつながる強力なUX引数がない場合は、おそらくランドスケープを強制しないでください。 「これは、固定ハードウェアドックで常に使用される特定のタブレットモデル用のレジアプリです」などのことです。

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

  • 主な関心事が偶発的なオリエンテーションの変更である場合、デバイスのセンサーとソフトウェアがうまく対応できないと思われるアクティビティの途中(たとえば、傾斜ベースのゲーム)で、ランドスケープとポートレートのサポートを検討しますが、オリエンテーションにはnosensorを使用します。これにより、ほとんどのタブレットでは横向きになり、ほとんどの携帯電話では縦向きになりますが、ほとんどの「通常の」アプリにはお勧めしません(携帯電話で横向きのソフトキーボードを入力したいユーザーや、多くのタブレットユーザーが縦向きで読みます-あなたがそれらを聞かせてください)。
  • 何らかの理由でポートレートを強制する必要があるstillの場合、Android 2.3+のsensorPortraitよりもportraitの方が良い場合があります。これにより、逆さまのポートレートが可能になります。これは、タブレットの使用では非常に一般的です。
1544
Yoni Samlan

私はこの記事を読むまでAndroidManifest.xmlファイルスイッチを知らなかったので、私のアプリでは代わりにこれを使いました。

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

このAndroid:screenOrientation="portrait"をマニフェストファイルのどこにあなたのアクティビティがこのように宣言されているかを追加します。

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

Javaコードを使ってやりたいのなら

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

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

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

37
Deepak Swami

ここでの多くの答えはあなたのAndroidManifest.xmlファイルで"portrait"を使うことを示唆しています。これは良い解決策のように思えるかもしれません - しかしドキュメンテーションで述べられているように、あなたは景色しかないかもしれないデバイスを選び出しています。また、特定のデバイス(横長で最適に機能するデバイス)を縦長にすることを強制しており、正しい向きになっていません。

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

23
Mike Weir

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

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

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

私のタイマーは画面上にあるものに対応しなければならないので私はこれを必要とし、そして画面を回転させることは現在の活動を破壊するでしょう。

10
Stephen

マニフェストに次のように追加するだけです。

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>   
8
Sunil Chaudhary

アクティビティのonCreate()でこれを使用してください。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
6
Karan Datwani

アクティビティタグにこの属性を追加するだけです。

 Android:screenOrientation="portrait"
5
Deepak Sharma

androidManifest.xmlのAndroid:screenOrientation="sensorPortait"を変更する必要があります

5
vuhung3990

アクティビティの各マニフェストエントリに方向性を追加するという面倒なことをしたくない場合は、 '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
alchemist

Landscape mode for your Android app(または単一のアクティビティ)を無効にしたい場合は、追加するだけです。

Android:screenOrientation="portrait"AndroidManifest.xmlファイルのactivityタグへ.

好きです:

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

もう1つの方法、プログラム的アプローチ。

あなたがプログラム的にこれをしたいならば。 Javaコードを使用する。ランドスケープモードで表示したくないアクティビティのJavaクラスに以下のコードを追加することでこれを行うことができます。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

4
IntelliJ Amiya

ランドスケープモードを無効にしたいアクティビティにAndroid:screenOrientation="portrait"を追加します。

4
Zhenxiao Hao

マニフェストファイルに次のスニペットを追加します。

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

このサポートのみ縦モード

4
XYZ_deve

Xamarin C#を使用している場合、これらの解決策のいくつかは機能しません。これが私が働くことがわかった解決策です。

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

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

3
Derek Kelly

各活動の方向を設定する必要があります。

<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>
3
Akshay Paliwal

いくつかのビューで向きを変える方法

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

あなたの見方をする 風景

OrientationUtils.lockOrientationLandscape(mActivity);

あなたの見方をする ポートレート

OrientationUtils.lockOrientationPortrait(mActivity);

ロック解除 Orientation

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

}
3
Hitesh Sahu

アプリケーションマニフェストのactivityタグにAndroid:screenOrientation="portrait"を追加するだけです。

例:

 <activity Android:name=".ui.activities.MainActivity"
  Android:screenOrientation="portrait"></activity>
3
Ahamed Mujeeb

つかいます

Android:configChanges="keyboardHidden|orientation"
Android:screenOrientation="portrait" 
3
Swayam

あなたの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);

}
3
Mansuu....

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

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
3
Kumar

このコードをマニフェストファイルに入れてください.......

    <activity Android:name=".SunderFlowersActivity"
        Android:label="@string/app_name"
        Android:screenOrientation="portrait">
        >
    </activity>
3
Tabish khan

すべてのアクティビティに共通の基本クラスを拡張しなくても、アプリケーション全体に対してこれを実行できます。

まず最初に、プロジェクトに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);
            }
            ....
        });
    }
}
3
Brinda Rathod
<Android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity Android:name=".MyActivity" 
                Android:screenOrientation="portrait" 
                Android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</Android>
2
user1624253

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

例えば :

<activity Android:name=".MapScreen" 
 Android:screenOrientation="portrait"></activity>
1
Pradeep Sodhi

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

1
user811985

プロジェクトに以下の表彰を追加してください。

npmインストール

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

それなら、 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>

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

1
shanmuga Rajan

他の人を助けるために、AndroidManifest.xmlのACTIVITYにある次の属性だけが必要です。

Android:configChanges = "向き"

だから、完全な活動ノード:

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

それは私のために働いた、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>
0
Arvina Kori
 <?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を使用して、縦長または横長モードでアクティビティを制限できます。

私たちのプログラムに複数のアクティビティがある場合は、どのモードのアクティビティでも任意のアクティビティを制限することができます。また、望まない他のアクティビティに影響を与えることはありません。

0
Amit Kumar

どちらもマニフェストクラスです。

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

またはプログラム的に

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

注: onCreate()のアクティビティのsetContentViewメソッドの前にこれを呼び出す必要があります。

0
Khemraj

コトリンでは、同じことがプログラム的に以下を使って達成することができます

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
0
osleonard

あなたのアクティビティが最初のデバイスの向きの状態に関連している場合は、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);
        }
0
Hamid