Dans AndroidManifest: attend Android: screenOrientation = "non spécifié"

44

Android Studio 3.6.

Je veux que mon application soit toujours en portraitmode. Donc dans mon AndroidMainfest.xml:

<activity
   android:name=".activity.SplashActivity"
   android:screenOrientation="portrait">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />

      <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

Je lance l'application et SplashActivitymontre en portraitmode. Agréable. Mais l'éditeur affiche l'erreur suivante:

Expecting android:screenOrientation="unspecified"

Pourquoi?

un_abonné
la source

Réponses:

69

Dans votre balise manifeste (juste en dessous xmlns:android="http://schemas.android.com/apk/res/android"), mettez

xmlns:tools="http://schemas.android.com/tools"

Puis à l'intérieur de la balise d'application, mettez

tools:ignore="LockedOrientationActivity"
Darragh MacKenna
la source
ou si vous avez déjà des outils: ignorer dans la balise d'application, puis définissez comme outils: ignore = "GoogleAppIndexingWarning, LockedOrientationActivity"
Mystère il y a
20

cela n'affecte que Android Studio 3.6+

Quel est le problème ici? Ce problème se produit car le framework Android veut que l'utilisateur contrôle lui-même l'orientation de l'application, il n'est pas conseillé de restreindre l'orientation de votre application, par exemple, si un utilisateur souhaite utiliser l'application en orientation paysage, il retourne simplement l'appareil et les capteurs feront le travail, mais lorsqu'un le développeur restreint l'orientation de l'écran, même lorsque l'application du capteur de rotation fonctionne restera dans un état prédéfini, de manière à restreindre les capacités de l'appareil de l'utilisateur.

Que faire maintenant? Vous avez deux options., La première consiste à ignorer l'erreur car elle ne causera aucun échec de construction, même si je fais la même chose et la génération apk / aab est comme d'habitude Une autre option consiste à fournir des dispositions de paysage ou à gérer la rotation comme dans certains les applications qui reconnaissent si l'orientation est modifiée, elles inviteront l'utilisateur à changer l'orientation car l'application n'est pas prise en charge dans une telle orientation

Cela peut changer à l'avenir => à l'heure actuelle, cela n'affecte pas notre processus de construction, mais cela pourrait changer à l'avenir

trinadh thatakula
la source
9

Dans Android studio 3.6.0, je suppose qu'ils veulent que l'utilisateur gère l'orientation et encourage le développeur à utiliser les choses de ViewModel . Permettez-moi d'expliquer screenOrientation en détail

android:screenOrientation="portrait"

vous donnera une erreur, vous devez soit spécifier

android:screenOrientation="fullSensor" or android:screenOrientation="unspecified"

fullSensor Signifie soit que vous avez activé la fonction "Pivoter" ou non, cela changera l'orientation en fonction du déplacement du téléphone

non spécifié Signifie que si vous avez activé la fonction Rotation désactivée, elle restera uniquement dans cette orientation et sinon, elle modifiera l'orientation en fonction du déplacement du téléphone.

Rajat
la source
4
tools:ignore="GoogleAppIndexingWarning,LockedOrientationActivity"
Android
la source
2
Pouvez-vous également expliquer à quoi sert ce code?
Rahul
2

J'ai utilisé la procédure ci-dessous. Cela fonctionne parfaitement pour moi. Dans Android studio 3.6.0, je pense qu'ils veulent que l'utilisateur gère l'orientation et encourage le développeur à utiliser les trucs de ViewModel. Utilisez la procédure ci-dessous pour ignorer cela.

Ajoutez d'abord:

xmlns:android="http://schemas.android.com/apk/res/android"

dans la balise manifest.

Deuxièmement, ajouter

tools:ignore="LockedOrientationActivity" 

dans la balise d'application. Codage heureux.

Shohel Rana
la source
1

J'ai trouvé 2 façons de résoudre ce problème

Première,

Android Studio -> Preferences (or settings in Windows)
-> search "chrome" 
-> Uncheck "Activity is locked to an orientation" 
-> apply and ok 
-> Sync Project with Gradle flie

Deuxièmement, `

Select "Run" from the main menu 
-> Edit Configurations.
-> Launch options - Launch
-> select Nothing or Specified Activity
-> Sync Project with Gradle file
tktschool
la source
1

Ajouter la ligne suivante après android:screenOrientation="portrait"

tools:ignore="LockedOrientationActivity"

Cliquez ensuite sur Alt+Enter

entrez la description de l'image ici

Damo Gurcinovski
la source
0

J'ai fait face à ce problème, dans mon exigence, une partie de l'activité soutiendra les deux orientations et les restes resteront en portrait, dans ce cas, j'ai résolu par les étapes suivantes:

Cas 1: - Pour verrouiller l'orientation

Étape 1: veuillez ajouter la balise d'application de ligne suivante dans AndroidManifest.xml

tools: ignore = "LockedOrientationActivity"

<application
android:name=".activity.MyApplication"
tools:ignore="LockedOrientationActivity">

Étape 2: Si vous souhaitez verrouiller l'orientation de l'écran en mode portrait ou paysage, ajoutez la ligne suivante dans la balise d'activité

android: screenOrientation = "portrait" ou "paysage"

Cas-2: - Supposons que si vous souhaitez permettre l'orientation dans une activité particulière et avoir une conception spécifique pour le paysage

Étape 1: Supprimez la valeur d'orientation dans les changements de configuration et supprimez l'orientation de l'écran si elle existe dans la balise d'activité, et ma suggestion personnelle utilise (LifecycleObserver) dans Activity for sans perdre de valeurs lors du changement d'orientation.

android: configChanges = "orientation"
android: screenOrientation = "portrait" ou "paysage"

C'est la façon dont je résous ce problème, j'espère que cela aide, merci et bon codage.

MohanRaj S
la source
0

Essayez cette solution:

AndroidMainfest:

<activity
    android:name="com.ui.activity.SplashActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

J'espère que cela t'aides!

R.Desai
la source
cette réponse ne fonctionne pas, dans android 3.6
Pedro Henrique
0

vous pouvez utiliser ce code:

if(MainActivity.this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT){
        MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
    }
Abu Baker Nawaz
la source
1
Veuillez ajouter quelques explications à votre réponse afin que d'autres puissent en tirer des leçons
Nico Haase
si le portrait d'orientation a verrouillé l'orientation de cette activité. ce qui signifie que l'orientation n'a jamais changé pour le paysage.
Abu Baker Nawaz
Veuillez modifier votre réponse pour qu'elle contienne toutes les explications
Nico Haase
-1

Essayez de mettre ce qui suit dans la balise d'activité

android:configChanges="orientation"
android:screenOrientation="portrait" 
Swayangjit
la source
Pas d'aide. C'est le mode portrait et paysage
a_subscriber
Mise à jour de la réponse, vous devrez ajouter les deux
Swayangjit
1
Cela ne fonctionne pas sur Android Studio 3.6.
Evgen