Comment désactiver le mode Paysage pour certaines vues de mon application Android?
Ajoutez Android:screenOrientation="portrait"
à l'activité du fichier AndroidManifest.xml. Par exemple:
<activity Android:name=".SomeActivity"
Android:label="@string/app_name"
Android:screenOrientation="portrait" />
EDIT: Depuis que cette réponse est devenue très populaire, je me sens très coupable, car forcer le portrait est rarement la bonne solution aux problèmes auxquels il est fréquemment confronté.
Les principales mises en garde concernant le portrait forcé:
retainInstance
fragments.La plupart des applications doivent donc laisser les capteurs, les logiciels 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. Toutefois, si vous n'êtes pas satisfait du comportement par défaut de sensor
orientation dans votre cas d'utilisation, vous pouvez toujours penser à quelques cas:
nosensor
pour l'orientation. Cela force le paysage sur la plupart des tablettes et portrait sur la plupart des téléphones, mais je ne le recommanderais toujours pas pour la plupart des applications "normales" (certains utilisateurs aiment juste taper le clavier logiciel Paysage sur leur téléphone, et de nombreux utilisateurs de tablettes lisent en mode portrait - et vous devriez les laisser).sensorPortrait
peut être meilleur que portrait
pour Android 2.3+; cela permet un portrait à l'envers, ce qui est assez courant dans l'utilisation d'une tablette.Je n'avais pas connaissance du changement de fichier AndroidManifest.xml
avant de lire cet article. Je l'utilise donc à la place dans mes applications:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Ajoutez ce Android:screenOrientation="portrait"
dans votre fichier manifeste dans lequel vous déclarez votre activité comme ceci
<activity Android:name=".yourActivity"
....
Android:screenOrientation="portrait" />
Si vous voulez utiliser le code Java, essayez
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
avant d'appeler la méthode setContentView
pour votre activité dans onCreate()
.
J'espère que cette aide et facilement compréhensible pour tous ...
Beaucoup de réponses suggèrent d'utiliser "portrait"
dans votre fichier AndroidManifest.xml. Cela peut sembler une bonne solution - mais comme indiqué dans la documentation, vous sélectionnez des périphériques qui peuvent uniquement avoir un paysage. Vous forcez également certains périphériques (qui fonctionnent le mieux en mode paysage) à se mettre en portrait, sans obtenir la bonne orientation.
Ma suggestion est d'utiliser "nosensor"
à la place. Cela laissera l'appareil utiliser son orientation 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 voulez les paramètres de l'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 la rotation de l'écran détruira l'activité en cours.
Ajoutez juste comme cette ligne dans votre manifeste
Android: screenOrientation = "portrait"
<manifest
package="com.example.speedtestmeter"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="8" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="MainActivity"
Android:label="@string/app_name"
Android:screenOrientation="portrait" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="ComparisionActivity"
Android:label="@string/app_name"
Android:screenOrientation="portrait" >
</activity>
<activity
Android:name="GaugeView"
Android:label="@string/app_name"
Android:screenOrientation="portrait" >
</activity>
<activity
Android:name="Resultactivity"
Android:label="@string/app_name"
Android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
Utilisez ceci dans onCreate () de l'activité
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ajoutez simplement cet attribut dans votre balise d'activité.
Android:screenOrientation="portrait"
Vous devez changer Android:screenOrientation="sensorPortrait"
dans AndroidManifest.xml
Si vous ne souhaitez pas améliorer l'ajout d'orientation dans chaque entrée d'activité manifeste, 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......
}
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 fichier AndroidManifest.xml
.
Comme:
_<activity Android:name="YourActivityName"
Android:icon="@drawable/ic_launcher"
Android:label="Your App Name"
Android:screenOrientation="portrait">
_
Autre approche, approche programmatique.
Si vous voulez le faire par programmation, par exemple. en utilisant Java code. 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 aidera. Pour plus de détails, visitez ici entrez la description du lien ici
Comment changer d'orientation dans certaines vues
Au lieu de verrouiller l'orientation de toute l'activité, vous pouvez utiliser cette classe pour verrouiller de manière pragmatique et dynamique l'orientation de n'importe quelle vue: -
Faites votre vue Paysage
OrientationUtils.lockOrientationLandscape(mActivity);
Faites votre vue Portrait
OrientationUtils.lockOrientationPortrait(mActivity);
Déverrouiller Orientation
OrientationUtils.unlockOrientation(mActivity);
Orientation Util Class
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);
}
}
Ajoutez Android:screenOrientation="portrait"
à l'activité pour laquelle vous souhaitez désactiver le mode Paysage.
Ajoutez l'extrait suivant dans votre fichier manifeste.
<activity Android:name=".yourActivity"
....
Android:screenOrientation="portrait"/>
Ce supporte seulement le mode portrait
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)]
Au-dessus de la classe fonctionne bien, similaire aux autres solutions, également non applicable globalement et doit être placé dans chaque en-tête d'activité.
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>
Ajoutez simplement Android:screenOrientation="portrait"
à la balise d'activité dans le manifeste de l'application.
Ex:
<activity Android:name=".ui.activities.MainActivity"
Android:screenOrientation="portrait"></activity>
utilisation
Android:configChanges="keyboardHidden|orientation"
Android:screenOrientation="portrait"
Vous pouvez forcer votre activité particulière à toujours rester en mode portrait en l'écrivant dans votre fichier manifest.xml.
<activity Android:name=".MainActivity"
Android:screenOrientation="portrait"></activity>
Vous pouvez également forcer votre activité à rester en mode post-traitement 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);
}
ajouter une classe dans la méthode oncreate ()
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Vous devriez mettre ce code dans le fichier manifestes .......
<activity Android:name=".SunderFlowersActivity"
Android:label="@string/app_name"
Android:screenOrientation="portrait">
>
</activity>
<Android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity Android:name=".MyActivity"
Android:screenOrientation="portrait"
Android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</Android>
Vous pouvez le faire pour l'ensemble de votre application sans avoir à faire en sorte que toutes vos activités étendent une classe de base commune.
L'astuce consiste d'abord à vous assurer d'inclure une sous-classe Application dans votre projet. Dans sa onCreate (), appelée lors du premier démarrage de votre application, vous enregistrez un objet ActivityLifecycleCallbacks (API de 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é de votre application est démarrée (ou arrêtée, ou reprise, ou autre chose). À 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);
}
....
});
}
}
Ajoutez Android:screenOrientation="portrait"
dans le fichier AndroidManifest.xml.
Par exemple:
<activity Android:name=".MapScreen"
Android:screenOrientation="portrait"></activity>
<?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 à l'aide de l'attribut ou d'Android: screenOrientation.
si nous avons plus d'une activité dans mon programme, vous êtes libre de restreindre n'importe quelle activité dans n'importe quel mode et cela n'a aucun effet sur les autres que vous ne voulez pas.
Dans le répertoire <apphome>/platform/Android
créé AndroidManifest.xml
(en le copiant à partir du répertoire généré). Ajoutez ensuite Android:screenOrientation=
"portrait
" à TOUS les éléments d'activité.
Ajouter ci-dessous recommander sur votre projet,
npm installer
npm je réagis-native-orientation-locker
alors vous utilisez la 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!
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>
Soit en classe manifeste.
<activity Android:name=".yourActivity"
....
Android:screenOrientation="portrait" />
ou par programmation
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Remarque: vous devriez appeler cela avant la méthode setContentView
pour votre activité dans onCreate()
.
En kotlin, on peut atteindre le même programme de la manière suivante:
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
Dans l’espoir d’aider quelqu'un d’autre, il ne manque plus que l’attribut suivant: ACTIVITY dans AndroidManifest.xml:
Android: configChanges = "orientation"
Donc, noeud d'activité complet:
<activity Android:name="Activity1"
Android:icon="@drawable/icon"
Android:label="App Name"
Android:configChanges="orientation">
si votre activité est liée au premier état d'orientation du périphérique, obtenez l'orientation actuelle du périphérique dans la méthode onCreate
, 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);
}