私はAndroid VNC を使用しています HTC G1 。しかし、何らかの理由で、G1がポートレートモードになっているにもかかわらず、そのアプリケーションは常にランドスケープモードになっています。 Android VNCビューアーはオープンソースなので、アクティビティを「ランドスケープ」にハードコードする方法を教えてください。電話の向きを尊重するように変更したいと思います。
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の外観が台無しになる可能性があります。あなたはそれを説明する必要があります。また、アクティビティのコーディング方法によっては、画面の向きが変更されると、入力ボックスに入力されていた値が消えることがあります。これも処理する必要があります。
Javaコードにも同じデータを設定できます。
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActivityInfoの他の値により、センサー駆動またはロックされたポートレートに戻すことができます。個人的には、この質問に対する別の回答で提案されているようにマニフェストの何かに設定し、必要に応じてAndroid SDKで上記の呼び出しを使用して後で変更するのが好きです。
私のOnCreate(Bundle)
では、通常次のことを行います。
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
マニフェストでアクティビティの方向を指定できます。 here を参照してください。
<activity Android:allowTaskReparenting=["true" | "false"]
...
Android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nosensor"]
...
"adjustResize", "adjustPan"] >
マニフェストで:
<activity Android:name=".YourActivity"
Android:screenOrientation="portrait"
Android:configChanges="orientation|screenSize">
あなたの活動:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
以下は、すべてのアクティビティを横長モードで表示するために使用したコードです。
<activity Android:screenOrientation="landscape"
Android:configChanges="orientation|keyboardHidden"
Android:name="abcActivty"/>
AndroidManifest.xmlファイル用の迅速で簡単な解決策は、強制的にランドスケープモードにするアクティビティごとに以下を追加します。
Android:screenOrientation="landscape"
これはXamarin.Androidで機能します。 OnCreate()で
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
それでおしまい!!この修正を待っています。
(プログラムで)ランドスケープモードを必要とするアクティビティのダブルスタートに関する古いAndroidの問題:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
Androidで、起動時に横向きモードにします。
Arslan、マニフェスト<activity Android:name=".youractivityName" Android:screenOrientation="portrait" />
にはすでに方法がありますが、なぜプログラム的にオリエンテーションを強制するのですか?
コードでそれを行うのはIMOの誤りであり、onCreateに入れた場合はなおさらです。マニフェストでそれを行うと、「システム」はアプリの起動時からの方向を認識します。そして、このタイプのメタまたはトップレベルの「ガイダンス」はマニフェストにあるべきです。自分で証明したい場合は、アクティビティのonCreateにブレークを設定します。そこでコードで実行すると、2回呼び出されます。ポートレートモードで起動してから、横向きに切り替わります。マニフェストで行う場合、これは発生しません。
Android 4. (アイスクリームサンドイッチ)以降では、landscape
値に加えて、これらを追加する必要がありました。
Android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
keyboardHidden|orientation
のみを使用すると、メモリリークが発生し、電源ボタンを押したときにアクティビティが再作成されます。
このようにsetLayoutメソッドを呼び出す前に、onCreateメソッドでActivityInfo(Android.content.pm.ActivityInfo)を使用します
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);