Comment puis-je désactiver le mode paysage pour certaines des vues de mon application Android?
Comment puis-je désactiver le mode paysage pour certaines des vues de mon application Android?
Réponses:
Ajoutez android:screenOrientation="portrait"
à l'activité dans AndroidManifest.xml. Par exemple:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDIT: Puisque c'est devenu une réponse super populaire, je me sens très coupable car forcer le portrait est rarement la bonne solution aux problèmes auxquels il est fréquemment appliqué.
Les principales mises en garde avec portrait forcé:
retainInstance
fragments.La plupart des applications doivent donc laisser les capteurs, le logiciel et la configuration physique du téléphone décider eux-mêmes de la manière dont l'utilisateur souhaite interagir avec votre application. Quelques cas auxquels vous voudrez peut-être penser, cependant, si vous n'êtes pas satisfait du comportement d' sensor
orientation par défaut dans votre cas d'utilisation:
nosensor
pour l'orientation. Cela force le paysage sur la plupart des tablettes et le portrait sur la plupart des téléphones, mais je ne recommanderais toujours pas cela pour la plupart des applications "normales" (certains utilisateurs aiment simplement taper le clavier logiciel paysage sur leurs téléphones, et de nombreux utilisateurs de tablettes lisent en portrait - et vous devez les laisser).sensorPortrait
peut être mieux que portrait
pour Android 2.3+; cela permet un portrait à l'envers, ce qui est assez courant dans l'utilisation de la tablette.Je n'étais pas au courant du AndroidManifest.xml
changement de fichier avant de lire ce post, donc dans mes applications, je l'ai utilisé à la place:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Ajoutez ceci android:screenOrientation="portrait"
dans votre fichier manifeste où vous déclarez votre activité comme ceci
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Si vous voulez faire en utilisant du code java, essayez
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
avant d'appeler la setContentView
méthode pour votre activité en onCreate()
.
J'espère que cette aide et facilement compréhensible pour tous ...
Beaucoup de réponses suggèrent ici d'utiliser "portrait"
dans votre fichier AndroidManifest.xml. Cela peut sembler être une bonne solution - mais comme indiqué dans la documentation, vous distinguez les périphériques qui ne peuvent avoir qu'un paysage. Vous forcez également certains appareils (qui fonctionnent mieux en paysage) à passer en mode portrait, sans obtenir l'orientation appropriée.
Ma suggestion est d'utiliser à la "nosensor"
place. Cela laissera l'appareil utiliser son orientation préférée par défaut, ne bloquera aucun achat / téléchargement sur Google Play et garantira que le capteur ne gâche pas votre jeu (NDK, dans mon cas).
Si vous souhaitez des paramètres utilisateur,
alors je recommanderais setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Vous pouvez modifier les paramètres à partir d'un menu de paramètres.
J'en ai besoin parce que mes minuteries doivent correspondre à ce qui est à l'écran, et tourner l'écran détruira l'activité en cours.
Ajoutez simplement Like this Line dans votre manifeste
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>
Vous pouvez le faire pour l'ensemble de votre application sans avoir à étendre toutes vos activités à une classe de base commune.
L'astuce consiste d'abord à vous assurer d'inclure une sous-classe d'application dans votre projet. Dans son onCreate (), appelé au premier démarrage de votre application, vous enregistrez un objet ActivityLifecycleCallbacks (API niveau 14+) pour recevoir des notifications d'événements de cycle de vie d'activité.
Cela vous donne la possibilité d'exécuter votre propre code chaque fois qu'une activité dans votre application est démarrée (ou arrêtée, ou reprise, ou autre). À ce stade, vous pouvez appeler setRequestedOrientation () sur l'activité nouvellement créée.
Et n'oubliez pas d'ajouter app: name = ". MyApp" dans votre fichier manifeste.
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);
}
....
});
}
}
Utilisez-le dans onCreate () de l'activité
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Vous devez changer android:screenOrientation="sensorPortrait"
dans AndroidManifest.xml
Ajoutez simplement cet attribut dans votre balise d'activité.
android:screenOrientation="portrait"
Si vous ne voulez pas passer par les tracas de l'ajout d'orientation dans chaque entrée manifeste d'activité, créez une classe BaseActivity (hérite de 'Activity' ou 'AppCompatActivity') qui sera héritée par chaque activité de votre application au lieu de 'Activity 'ou' AppCompatActivity 'et ajoutez simplement le code suivant dans votre BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
Ajoutez android:screenOrientation="portrait"
à l'activité que vous souhaitez désactiver le mode paysage.
Si vous souhaitez désactiver Landscape mode for your android app
(ou une seule activité), il vous suffit d'ajouter,
android:screenOrientation="portrait"
à la balise d'activité dans le AndroidManifest.xml
fichier.
Comme:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Une autre façon, l'approche programmatique.
Si vous voulez le faire par programme, c'est-à-dire. en utilisant du code Java. Vous pouvez le faire en ajoutant le code ci-dessous dans la classe Java de l'activité que vous ne souhaitez pas afficher en mode paysage.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
J'espère que cela vous aide. Pour plus de détails, vous pouvez visiter ici entrer la description du lien ici
android:screenOrientation="nosensor">
Comment changer l'orientation dans une partie de la vue
Au lieu de verrouiller l'orientation de toute l'activité, vous pouvez utiliser cette classe pour verrouiller dynamiquement l'orientation de n'importe laquelle de vos vues de manière pragmatique: -
Faites votre paysage
OrientationUtils.lockOrientationLandscape(mActivity);
Faites votre portrait
OrientationUtils.lockOrientationPortrait(mActivity);
Déverrouiller l' orientation
OrientationUtils.unlockOrientation(mActivity);
Classe d'utilisation d'orientation
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);
}
}
Vous devez définir l'orientation de chaque activité.
<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>
Si vous utilisez Xamarin C #, certaines de ces solutions ne fonctionneront pas. Voici la solution que j'ai trouvée pour fonctionner.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
La classe ci-dessus fonctionne bien, comme les autres solutions, elle n'est pas non plus applicable à l'échelle mondiale et doit être placée dans chaque en-tête d'activité.
Vous pouvez forcer votre activité particulière à toujours rester en mode portrait en écrivant ceci dans votre manifest.xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Vous pouvez également forcer votre activité à rester en mode postrait en écrivant la ligne suivante dans la méthode onCreate () de votre activité
@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>
Ajoutez ci-dessous félicitations pour votre projet,
installation de npm
npm i react-native-orientation-locker
puis vous utilisez une classe manifeste comme React_Native (votre dossier de projet) / 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>
Merci!
Dans le <apphome>/platform/android
répertoire créé AndroidManifest.xml
(en le copiant à partir du répertoire généré). Ajoutez ensuite android:screenOrientation=
" portrait
" à TOUS les éléments d'activité.
<?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>
nous pouvons restreindre l'activité en mode portrait ou paysage en utilisant l'attribut ou android: screenOrientation.
si nous avons plus d'une activité dans mon programme, vous avez la liberté de restreindre n'importe quelle activité dans n'importe quel mode et cela n'affecte jamais les autres dont vous ne voulez pas.
Soit en classe manifeste.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
ou par programme
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Remarque: vous devez appeler cette setContentView
méthode avant pour votre activité dans onCreate()
.
Ajouter android:screenOrientation="portrait"
dans AndroidManifest.xml fichier.
Par exemple :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
Dans l'espoir d'aider quelqu'un d'autre, l'attribut suivant sur l'activité dans AndroidManifest.xml est tout ce dont vous avez besoin:
android: configChanges = "orientation"
Donc, nœud d'activité complet:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Cela a fonctionné pour moi, essayez d'ajouter ce code dans le fichier AndroidManifest
<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>
Mettez-le dans votre manifeste.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
L'orientation sera portrait, mais si le téléphone de l'utilisateur est à l'envers, il indique également la bonne façon. (Votre écran pivotera donc de 180 degrés).
Le système ignore cet attribut si l'activité s'exécute en mode multi-fenêtres .
si votre activité est liée au premier état d'orientation de l'appareil, récupérez l'orientation actuelle de l'appareil dans la onCreate
méthode, puis corrigez-la pour toujours:
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);
}