Android アプリの一部のビューでランドスケープ モードを無効にするにはどうすればよいですか?
31 に答える
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
私はこの投稿を読むまでファイル スイッチを認識していなかったAndroidManifest.xml
ので、私のアプリでは代わりにこれを使用しました。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed portrait orientation
ここでの回答の多くは、"portrait"
AndroidManifest.xml ファイルで使用することを提案しています。これは良い解決策のように思えるかもしれませんが、ドキュメントに記載されているように、ランドスケープしか持たないデバイスを選び出しています。また、特定のデバイス (横向きで最適に動作する) を強制的に縦向きにし、適切な向きにしません。
私の提案は、"nosensor"
代わりに使用することです。これにより、デバイスはデフォルトの優先方向を使用したままになり、Google Play での購入/ダウンロードをブロックせず、センサーが (私の場合は NDK) ゲームを台無しにしないようになります。
マニフェストに次の行を追加するだけです。
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);
設定メニューから設定を変更できます。
タイマーは画面の内容に対応している必要があり、画面を回転させると現在のアクティビティが破棄されるため、これが必要です。
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);
android:screenOrientation="sensorPortrait"
AndroidManifest.xmlで変更する必要があります
アクティビティの onCreate() でこれを使用します
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
この属性をアクティビティ タグに追加するだけです。
android:screenOrientation="portrait"
android:screenOrientation="portrait"
横向きモードを無効にするアクティビティに追加します。
Xamarin C#を使用している場合、これらのソリューションの一部は機能しません。ここに私が見つけた解決策があります。
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = 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>
使用する:
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
マニフェストに入れます。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
向きは縦になりますが、ユーザーの電話が上下逆の場合も正しい向きで表示されます。(画面が 180 度回転します。)
アクティビティがマルチウィンドウ モードで実行されている場合、システムはこの属性を無視します。
詳細: https://developer.android.com/guide/topics/manifest/activity-element
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity
android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
マニフェスト クラスのいずれかで:
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
またはプログラムで:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
注:setContentView
でのアクティビティのメソッドの前に、これを呼び出す必要がありますonCreate()
。
以下のコマンドをプロジェクトに追加します。
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>
<apphome>/platform/android
ディレクトリで、作成します(AndroidManifest.xml
生成されたものからコピーします)。
次に、すべての活動要素に追加android:screenOrientation="portrait"
します。
AndroidManifest.xmlファイルに追加android:screenOrientation="portrait"
します。
例えば:
<activity
android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
必要なのは、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
アクティビティが最初のデバイスの向きの状態に関連している場合は、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);
}