105 votes

Comment verrouiller l'orientation d'une application Android en mode portrait sur les téléphones et en mode paysage sur les tablettes ?

Je développe une application Android dont je ne veux pas que l'orientation passe en mode paysage lorsque l'utilisateur fait pivoter l'appareil. De plus, je veux que l'orientation verrouillée soit en mode portrait sur les téléphones et en mode paysage sur les tablettes. Est-ce possible ? Si oui, comment ? Merci.

2voto

Chetan Points 105

Définissez l'orientation de l'écran sur portrait dans le fichier Manifest sous l'étiquette d'activité.

Voici l'exemple

Vous devez entrer dans chaque activité

Ajouter les lignes suivantes dans l'activité

pour le portrait

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

pour le paysage

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

Voici l'exemple de MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">

    <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"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

<activity android:name=".MainActivity2"
            android:screenOrientation="landscape"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

1voto

Ravish kumar Points 51

Définissez l'orientation de l'écran sur portrait dans le fichier Manifest sous l'étiquette d'activité.

1voto

Anton Shikhert Points 11
android:screenOrientation="locked"

sur <application> pour tous les app sur <activity> pour l'activité réelle

0voto

vikas kumar Points 3629

Je voudrais compléter la réponse de Bhavesh. Le problème est que si les utilisateurs gardent le téléphone en mode paysage et lancent l'application, celle-ci passera d'abord en mode paysage puisqu'elle est basée sur le principe de l'affichage en mode paysage. capteur dans le manifeste et passera ensuite immédiatement en mode portrait dans les téléphones grâce au code dans onCreate. Pour résoudre ce problème, l'approche ci-dessous a fonctionné pour moi.

1 Déclarer l'orientation verrouillée dans le manifeste de l'activité android:screenOrientation="locked"

  <activity
        android:name=".overview.OverviewActivity"
        android:screenOrientation="locked" />

2 Vérifier la présence d'une tablette ou d'un téléphone en activité ou en activité de base.

override fun onCreate(savedInstanceState: Bundle?) {
    //check if the device is a tablet or a phone and set the orientation accordingly
    handleOrientationConfiguration()
    super.onCreate(savedInstanceState)
}

/**
 * This function has to be called before anything else in order to inform the system about
 * expected orientation configuration based on if it is a phone or a tablet
 */
private fun handleOrientationConfiguration() {
    requestedOrientation = if (UIUtils.isTablet(this).not()) {
        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    } else {
        ActivityInfo.SCREEN_ORIENTATION_SENSOR
    }
}

UIUtils.kt

fun isTablet(context: Context): Boolean {
        return context.resources.configuration.smallestScreenWidthDp >= 600
    }

C'est tout, il lancera l'application en mode verrouillé de sorte que si vous êtes sur un téléphone, elle sera toujours représentée et si vous êtes sur une tablette, elle tournera en fonction de l'orientation de l'appareil. De cette façon, le problème des téléphones qui basculent entre le paysage et le portrait dès le départ sera éliminé.

Plus d'informations ici sur le mode verrouillé ci-dessous https://developer.Android.com/guide/topics/manifest/activity-element

-1voto

himanshu jain Points 21

Ajoutez juste :

android:screenOrientation="portrait"

en " AndroidManifest.xml " :

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X