web-dev-qa-db-ja.com

Androidアクティビティが常に横向きモードを使用するように強制します

私はAndroid VNC を使用しています HTC G1 。しかし、何らかの理由で、G1がポートレートモードになっているにもかかわらず、そのアプリケーションは常にランドスケープモードになっています。 Android VNCビューアーはオープンソースなので、アクティビティを「ランドスケープ」にハードコードする方法を教えてください。電話の向きを尊重するように変更したいと思います。

131
hap497

AndroidManifest.xml( link )の9行目を見てください:

<activity Android:screenOrientation="landscape" Android:configChanges="orientation|keyboardHidden" Android:name="VncCanvasActivity">

この行は、screenOrientationをランドスケープとして指定しますが、著者は、configChanges="orientation|keyboardHidden"を使用して画面の向きの変更をオーバーライドします。これは、VncCanvasActivity.Javaでオーバーライドされた関数を指します。

VncCanvasActivityを見ると、109行目にオーバーライドされた関数があります。

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // ignore orientation/keyboard change
  super.onConfigurationChanged(newConfig);
}

作成者は、キーボードまたは向きの変更を無視するために、特にコメントを付けました。


これを変更する場合は、上記のAndroidManifest.xmlファイルに戻って、行を次のように変更できます。

<activity Android:screenOrientation="sensor" Android:name="VncCanvasActivity">

これにより、ユーザーがデバイスを回転させると、プログラムが縦から横に切り替わるようになります。

これは機能するかもしれませんが、レイアウトの作成方法によっては、GUIの外観が台無しになる可能性があります。あなたはそれを説明する必要があります。また、アクティビティのコーディング方法によっては、画面の向きが変更されると、入力ボックスに入力されていた値が消えることがあります。これも処理する必要があります。

179
Pulkit Sethi

Javaコードにも同じデータを設定できます。

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfoの他の値により、センサー駆動またはロックされたポートレートに戻すことができます。個人的には、この質問に対する別の回答で提案されているようにマニフェストの何かに設定し、必要に応じてAndroid SDKで上記の呼び出しを使用して後で変更するのが好きです。

113
haseman

私のOnCreate(Bundle)では、通常次のことを行います。

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
39
anwarma

マニフェストでアクティビティの方向を指定できます。 here を参照してください。

<activity Android:allowTaskReparenting=["true" | "false"]
...
          Android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  
31

マニフェストで:

<activity  Android:name=".YourActivity"
Android:screenOrientation="portrait"
Android:configChanges="orientation|screenSize">

あなたの活動:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
19
avisper

以下は、すべてのアクティビティを横長モードで表示するために使用したコードです。

<activity Android:screenOrientation="landscape"
          Android:configChanges="orientation|keyboardHidden"
          Android:name="abcActivty"/>
10
Megha

AndroidManifest.xmlファイル用の迅速で簡単な解決策は、強制的にランドスケープモードにするアクティビティごとに以下を追加します。

Android:screenOrientation="landscape"
7
joshgoldeneagle

これはXamarin.Androidで機能します。 OnCreate()で

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
5
ComeIn

それでおしまい!!この修正を待っています。

(プログラムで)ランドスケープモードを必要とするアクティビティのダブルスタートに関する古いAndroidの問題:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

Androidで、起動時に横向きモードにします。

4
AndrewDC

Arslan、マニフェスト<activity Android:name=".youractivityName" Android:screenOrientation="portrait" />にはすでに方法がありますが、なぜプログラム的にオリエンテーションを強制するのですか?

3
Blue Moon

コードでそれを行うのはIMOの誤りであり、onCreateに入れた場合はなおさらです。マニフェストでそれを行うと、「システム」はアプリの起動時からの方向を認識します。そして、このタイプのメタまたはトップレベルの「ガイダンス」はマニフェストにあるべきです。自分で証明したい場合は、アクティビティのonCreateにブレークを設定します。そこでコードで実行すると、2回呼び出されます。ポートレートモードで起動してから、横向きに切り替わります。マニフェストで行う場合、これは発生しません。

1
HörmannHH

Android 4. (アイスクリームサンドイッチ)以降では、landscape値に加えて、これらを追加する必要がありました。

Android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

keyboardHidden|orientationのみを使用すると、メモリリークが発生し、電源ボタンを押したときにアクティビティが再作成されます。

0
Peterdk

このようにsetLayoutメソッドを呼び出す前に、onCreateメソッドでActivityInfo(Android.content.pm.ActivityInfo)を使用します

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
0
Yamikani Sita