Wie kann ich den Querformatmodus für einige Ansichten in meiner Android-App deaktivieren?
Wie kann ich den Querformatmodus für einige Ansichten in meiner Android-App deaktivieren?
Antworten:
Fügen Sie android:screenOrientation="portrait"
der Aktivität in der Datei AndroidManifest.xml hinzu. Zum Beispiel:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDIT: Da dies eine sehr beliebte Antwort geworden ist, fühle ich mich sehr schuldig, da das Erzwingen von Porträts selten die richtige Lösung für die Probleme ist, auf die es häufig angewendet wird.
Die wichtigsten Vorbehalte mit erzwungenem Porträt:
retainInstance
Fragmenten umzugehen.Daher sollten die meisten Apps nur die Telefonsensoren, die Software und die physische Konfiguration selbst entscheiden lassen, wie der Benutzer mit Ihrer App interagieren möchte. Einige Fälle, über die Sie möglicherweise noch nachdenken möchten, wenn Sie mit dem Standardverhalten der sensor
Orientierung in Ihrem Anwendungsfall nicht zufrieden sind :
nosensor
für die Ausrichtung verwenden. Dies erzwingt Landschaft auf den meisten Tablets und Hochformat auf den meisten Handys, aber ich würde dies für die meisten "normalen" Apps immer noch nicht empfehlen (einige Benutzer geben einfach gerne das Querformat-Softkeyboard auf ihren Handys ein, und viele Tablet-Benutzer lesen Hochformat - und du solltest sie lassen).sensorPortrait
möglicherweise besser als portrait
für Android 2.3+. Dies ermöglicht ein auf dem Kopf stehendes Porträt, was bei der Verwendung von Tablets durchaus üblich ist.Der Dateischalter war mir AndroidManifest.xml
erst beim Lesen dieses Beitrags bekannt, daher habe ich ihn in meinen Apps stattdessen verwendet:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Fügen Sie dies android:screenOrientation="portrait"
in Ihre Manifestdatei ein, in der Sie Ihre Aktivität wie folgt deklarieren
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Wenn Sie Java-Code verwenden möchten, versuchen Sie es
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
bevor Sie die setContentView
Methode für Ihre Aktivität in aufrufen onCreate()
.
Hoffe diese Hilfe und für alle leicht verständlich ...
Viele der Antworten hier schlagen vor, sie "portrait"
in Ihrer AndroidManifest.xml-Datei zu verwenden. Dies scheint eine gute Lösung zu sein - aber wie in der Dokumentation angegeben, wählen Sie Geräte aus, die möglicherweise nur über eine Landschaft verfügen. Sie zwingen auch bestimmte Geräte (die im Querformat am besten funktionieren) dazu, im Hochformat zu arbeiten, ohne die richtige Ausrichtung zu erhalten.
Mein Vorschlag ist, "nosensor"
stattdessen zu verwenden . Dadurch kann das Gerät seine bevorzugte Standardausrichtung verwenden, keine Käufe / Downloads bei Google Play blockieren und sicherstellen, dass der Sensor Ihr Spiel (in meinem Fall NDK) nicht durcheinander bringt.
Wenn Sie Benutzereinstellungen wünschen,
dann würde ich empfehlen setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Sie können die Einstellungen über ein Einstellungsmenü ändern.
Ich benötige dies, da meine Timer dem entsprechen müssen, was auf dem Bildschirm angezeigt wird. Durch Drehen des Bildschirms wird die aktuelle Aktivität zerstört.
Fügen Sie einfach Like this Line in Ihr Manifest ein
android: screenOrientation = "Porträt"
<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>
Sie können dies für Ihre gesamte Anwendung tun, ohne dass alle Ihre Aktivitäten eine gemeinsame Basisklasse erweitern müssen.
Der Trick besteht zunächst darin, sicherzustellen, dass Sie eine Anwendungsunterklasse in Ihr Projekt aufnehmen. In onCreate (), das beim ersten Start Ihrer App aufgerufen wird, registrieren Sie ein ActivityLifecycleCallbacks-Objekt (API-Level 14+), um Benachrichtigungen über Aktivitätslebenszyklusereignisse zu erhalten.
Dies gibt Ihnen die Möglichkeit, Ihren eigenen Code auszuführen, wenn eine Aktivität in Ihrer App gestartet (oder gestoppt oder fortgesetzt oder was auch immer) wird. Zu diesem Zeitpunkt können Sie setRequestedOrientation () für die neu erstellte Aktivität aufrufen.
Und vergessen Sie nicht, app: name = ". MyApp" in Ihre Manifestdatei aufzunehmen.
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
Verwenden Sie dies in onCreate () der Aktivität
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Sie sollten android:screenOrientation="sensorPortrait"
in AndroidManifest.xml ändern
Fügen Sie dieses Attribut einfach in Ihr Aktivitäts-Tag ein.
android:screenOrientation="portrait"
Wenn Sie nicht die Mühe machen möchten, in jedem Manifest-Aktivitätseintrag eine bessere Orientierung hinzuzufügen, erstellen Sie eine BaseActivity-Klasse (erbt 'Activity' oder 'AppCompatActivity'), die von jeder Aktivität Ihrer Anwendung anstelle von 'Activity' geerbt wird 'oder' AppCompatActivity 'und fügen Sie einfach den folgenden Code in Ihre BaseActivity ein:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
Fügen Sie android:screenOrientation="portrait"
der Aktivität hinzu, die Sie im Querformat deaktivieren möchten.
Wenn Sie Landscape mode for your android app
(oder eine einzelne Aktivität) deaktivieren möchten, müssen Sie lediglich Folgendes hinzufügen:
android:screenOrientation="portrait"
zum Aktivitäts-Tag in der AndroidManifest.xml
Datei.
Mögen:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Ein anderer Weg, programmatischer Ansatz.
Wenn Sie dies programmatisch tun möchten, z. mit Java-Code. Sie können dies tun, indem Sie den folgenden Code in die Java-Klasse der Aktivität einfügen, die im Querformat nicht angezeigt werden soll.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ich hoffe, es hilft Ihnen. Für weitere Details, die Sie hier besuchen können, geben Sie hier die Linkbeschreibung ein
android:screenOrientation="nosensor">
So ändern Sie die Ausrichtung in einigen Ansichten
Anstatt die Ausrichtung der gesamten Aktivität zu sperren, können Sie diese Klasse verwenden, um die Ausrichtung aus jeder Ihrer Ansichten pragmatisch dynamisch zu sperren: -
Machen Sie Ihre Ansicht Landschaft
OrientationUtils.lockOrientationLandscape(mActivity);
Machen Sie Ihre Ansicht Porträt
OrientationUtils.lockOrientationPortrait(mActivity);
Orientierung freischalten
OrientationUtils.unlockOrientation(mActivity);
Orientierungs-Util-Klasse
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;
/* * This class is used to lock orientation of android app in nay android devices
*/
public class OrientationUtils {
private OrientationUtils() {
}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getRotation();
// Copied from Android docs, since we don't have these values in Froyo
// 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
Sie müssen die Ausrichtung jeder Aktivität festlegen.
<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>
Wenn Sie Xamarin C # verwenden, funktionieren einige dieser Lösungen nicht. Hier ist die Lösung, die ich gefunden habe, um zu funktionieren.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
Über der Klasse funktioniert gut, ähnlich wie bei den anderen Lösungen, auch nicht global anwendbar und muss in jedem Aktivitätsheader platziert werden.
Sie können Ihre bestimmte Aktivität zwingen, immer im Hochformat zu bleiben, indem Sie dies in Ihre manifest.xml schreiben
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Sie können Ihre Aktivität auch zwingen, im Postrait-Modus zu bleiben, indem Sie die folgende Zeile in die onCreate () -Methode Ihrer Aktivität schreiben
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
Fügen Sie unten Lob zu Ihrem Projekt hinzu,
npm installieren
npm ich reagiere-native-Orientierung-Schließfach
Dann verwenden Sie eine Manifestklasse wie React_Native (Ihr Projektordner) / android / app / src / main / AndroidManifest.xml
<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>
Vielen Dank!
In dem erstellten <apphome>/platform/android
Verzeichnis AndroidManifest.xml
(Kopieren aus dem generierten). Fügen Sie dann ALLEN Aktivitätselementen android:screenOrientation=
" portrait
" hinzu.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.co.nurture.bajajfinserv">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Wir können die Aktivität im Hoch- oder Querformat einschränken, indem wir das Attribut oder android: screenOrientation verwenden.
Wenn wir mehr als eine Aktivität in meinem Programm haben, haben Sie die Freiheit, eine Aktivität in einem beliebigen Modus einzuschränken, und es wirkt sich niemals auf die anderen aus, die Sie nicht möchten.
Entweder in der Manifestklasse.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
oder programmatisch
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Hinweis: Sie sollten dies vor der setContentView
Methode für Ihre Aktivität in aufrufen onCreate()
.
Fügen Sie android:screenOrientation="portrait"
in AndroidManifest.xml Datei.
Beispielsweise :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
In der Hoffnung, jemand anderem zu helfen, ist das folgende Attribut für die AKTIVITÄT in AndroidManifest.xml alles, was Sie benötigen:
android: configChanges = "Orientierung"
Also, voller Aktivitätsknoten:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Es hat bei mir funktioniert. Versuchen Sie, diesen Code in die AndroidManifest-Datei einzufügen
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
....
....
</application>
Setzen Sie es in Ihr Manifest ein.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
Die Ausrichtung ist im Hochformat, aber wenn das Telefon des Benutzers auf dem Kopf steht, zeigt es auch den richtigen Weg. (Ihr Bildschirm dreht sich also um 180 Grad).
Das System ignoriert dieses Attribut, wenn die Aktivität im Mehrfenstermodus ausgeführt wird .
Wenn sich Ihre Aktivität auf den ersten Status der Geräteorientierung bezieht, rufen Sie die aktuelle Geräteorientierung in der onCreate
Methode ab und korrigieren Sie sie für immer:
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);
}