1015

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

4

31 に答える 31

1762

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し、向きには使用することを検討してください。これにより、ほとんどのタブレットでは横向きになり、ほとんどの携帯電話では縦向きになりますが、ほとんどの「通常の」アプリではこれをお勧めしません (一部のユーザーは携帯電話で横向きのソフトキーボードを入力したいだけで、多くのタブレット ユーザーは縦向きで読みます。あなたはそれらを許可する必要があります)。
  • なんらかの理由でポートレートを強制する必要がある場合は、Android 2.3 (Gingerbread) 以降sensorPortraitよりも優れている可能性があります。これにより、タブレットでの使用では非常に一般的な上下逆さまのポートレートが可能になります。portrait
于 2009-02-24T17:04:33.523 に答える
117

私はこの投稿を読むまでファイル スイッチを認識していなかったAndroidManifest.xmlので、私のアプリでは代わりにこれを使用しました。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed portrait orientation
于 2010-10-18T14:53:15.503 に答える
31

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

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

于 2013-08-21T14:41:33.673 に答える
16

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

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>
于 2015-02-05T09:30:58.550 に答える
15

ユーザー設定が必要な場合は、お勧めしますsetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

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

于 2012-02-10T04:46:49.323 に答える
15

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);
于 2015-03-16T05:25:50.040 に答える
8

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

于 2014-01-03T06:04:00.097 に答える
8

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
于 2015-05-06T09:59:31.527 に答える
7

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

 android:screenOrientation="portrait"
于 2013-10-01T07:00:13.207 に答える
7

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

于 2014-01-26T09:30:04.750 に答える
5

Xamarin C#を使用している場合、これらのソリューションの一部は機能しません。ここに私が見つけた解決策があります。

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

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

于 2016-03-20T14:52:58.373 に答える
5

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

<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>
于 2015-02-04T07:23:24.877 に答える
5

使用する:

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" 
于 2012-05-14T16:42:12.987 に答える
4

マニフェストに入れます。

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

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


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

詳細: https://developer.android.com/guide/topics/manifest/activity-element

于 2020-03-20T14:09:51.030 に答える
3
<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity
                android:name=".MyActivity"
                android:screenOrientation="portrait"
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>
于 2012-09-04T06:30:56.640 に答える
3

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

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

またはプログラムで:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

于 2018-05-13T17:23:06.730 に答える
3

以下のコマンドをプロジェクトに追加します。

npm install

npm i react-native-orientation-locker

次に、 React_Native (Your Project Folder)/ 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>
于 2018-12-27T09:14:12.843 に答える
2

<apphome>/platform/androidディレクトリで、作成します(AndroidManifest.xml生成されたものからコピーします)。

次に、すべての活動要素に追加android:screenOrientation="portrait"します。

于 2011-09-19T10:46:58.503 に答える
2

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

例えば:

<activity 
    android:name=".MapScreen"
    android:screenOrientation="portrait"></activity>
于 2012-02-01T07:42:51.080 に答える
1

必要なのは、AndroidManifest.xmlのアクティビティの次の属性だけです。

android:configChanges="orientation"

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

<activity
    android:name="Activity1"
    android:icon="@drawable/icon"
    android:label="App Name"
    android:configChanges="orientation">
于 2013-07-17T22:53:22.560 に答える
1

Kotlinでは、以下を使用してプログラムで同じことを実現できます。

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
于 2017-06-11T15:07:31.550 に答える
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);
}
于 2016-09-22T15:14:09.610 に答える