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.
Réponses
Trop de publicités?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>
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
- Réponses précédentes
- Plus de réponses