wake-up-neo.com

Erzwinge eine Android Aktivität, um immer den Querformatmodus zu verwenden

Ich verwende den Android VNC Viewer auf meinem HTC G1 . Aber aus irgendeinem Grund Diese Anwendung befindet sich immer im Querformat, obwohl sich mein G1 im Hochformat befindet. Da der Android VNC-Viewer Open Source ist, möchte ich wissen, wie es möglich ist, eine Aktivität als "Querformat" zu codieren. Ich möchte es ändern, um die Ausrichtung des Telefons zu respektieren.

134
hap497

Schauen Sie sich die AndroidManifest.xml ( link ) in Zeile 9 an:

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

Diese Zeile gibt das screenOrientation als Querformat an, aber der Autor überschreibt darüber hinaus alle Änderungen der Bildschirmausrichtung mit configChanges="orientation|keyboardHidden". Dies zeigt auf eine überschriebene Funktion in VncCanvasActivity.Java.

Wenn Sie sich VncCanvasActivity ansehen, steht in Zeile 109 die überschriebene Funktion:

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

Der Autor hat ausdrücklich einen Kommentar abgegeben, um Tastatur- oder Ausrichtungsänderungen zu ignorieren.


Wenn Sie dies ändern möchten, können Sie zur oben gezeigten AndroidManifest.xml-Datei zurückkehren und die Zeile wie folgt ändern:

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

Dies sollte das Programm so ändern, dass es vom Hochformat zum Querformat wechselt, wenn der Benutzer das Gerät dreht.

Dies funktioniert möglicherweise, kann jedoch das Erscheinungsbild der Benutzeroberfläche beeinträchtigen, je nachdem, wie das Layout erstellt wurde. Sie müssen das berücksichtigen. Abhängig davon, wie die Aktivitäten codiert sind, werden Sie möglicherweise feststellen, dass die in Eingabefelder eingegebenen Werte verschwinden, wenn die Bildschirmausrichtung geändert wird. Dies muss möglicherweise ebenfalls behandelt werden.

181
Pulkit Sethi

Sie können die gleichen Daten auch in Ihrem Java - Code einstellen.

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Andere Werte in ActivityInfo ermöglichen es Ihnen, das sensorgesteuerte oder gesperrte Porträt wiederherzustellen. Persönlich möchte ich es auf etwas im Manifest einstellen, wie in einer anderen Antwort auf diese Frage vorgeschlagen, und es später mit dem obigen Aufruf im Android SDK ändern, wenn es nötig ist.

114
haseman

In meinem OnCreate(Bundle) mache ich im Allgemeinen Folgendes:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
39
anwarma

Sie können die Ausrichtung einer Aktivität im Manifest angeben. Siehe hier .

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

Im Manifest:

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

In Ihrer Tätigkeit:

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

Das Folgende ist der Code, mit dem ich alle Aktivitäten im Querformat angezeigt habe:

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

Eine schnelle und einfache Lösung besteht darin, für die Datei AndroidManifest.xml für jede Aktivität, die Sie in den Querformatmodus zwingen möchten, Folgendes hinzuzufügen:

Android:screenOrientation="landscape"
7
joshgoldeneagle

Dies funktioniert für Xamarin.Android. In OnCreate ()

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

Das ist es!! Lange auf dieses Update warten.

Ich habe ein altes Android) Problem bezüglich des Doppelstarts einer Aktivität, die (programmgesteuert) den Querformatmodus erforderte: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

Jetzt Android Landschaftsmodus beim Start machen.

4
AndrewDC

Arslan, warum willst du die Orientierung programmatisch erzwingen, obwohl es bereits einen Weg im Manifest gibt <activity Android:name=".youractivityName" Android:screenOrientation="portrait" />

3
Blue Moon

Es ist IMO-falsch, es in Code zu tun, und noch mehr, wenn Sie es in onCreate einfügen. Tun Sie es im Manifest und das "System" kennt die Ausrichtung vom Start der App. Und diese Art von Meta oder Top-Level "Anleitung" sollte im Manifest sein. Wenn Sie es sich selbst beweisen möchten, legen Sie eine Unterbrechung in der OnCreate-Aktivität fest. Wenn Sie es dort im Code machen, wird es zweimal aufgerufen: Es startet im Hochformat und wechselt dann zu Querformat. Dies geschieht nicht, wenn Sie dies im Manifest tun.

1
HörmannHH

Für Android 4. (Ice Cream Sandwich) und später musste ich diese neben dem Wert landscape hinzufügen.

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

Verwenden Sie nur keyboardHidden|orientation würde immer noch zu Speicherverlusten und zur Wiederherstellung meiner Aktivitäten führen, wenn der Netzschalter gedrückt wird.

0
Peterdk

Verwenden Sie die ActivityInfo (Android.content.pm.ActivityInfo) in Ihrer onCreate-Methode, bevor Sie die setLayout-Methode wie diese aufrufen

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