web-dev-qa-db-fra.com

Orientation de l'écran et valeurs dans manifest.xml

Je souhaite utiliser toutes les activités de ma forme en paysage ou en portrait. Lorsque l'utilisateur sélectionne l'orientation - cela est valable pour toutes les activités. Essayé avec l'orientation de l'option "derrière". Selon Google, l'orientation dépendra de l'activité précédente. Ma première activité utilise setRequestedOrientation pour définir la sélection de l'orientation utilisateur. Les prochaines activités doivent suivre la même orientation. Dois-je également mettre setRequestedOrientation dans leur code? Ou plutôt sur le paramètre "derrière" dans le manifet? Mettre setRequestedOrientation peut être à nouveau à l'origine de la création?

MISE À JOUR: "portrait" et setRequestedOrientation () - resilt si onCreate ont été appelés 2 fois. Le problème est dans l'activité suivante -> à cause du "portrait" dans la première activité - Android a commencé l'activité suivante avec la même orientation. Il ignore l'orientation "paysage" que j'ai définie :(

17
Kostadin

Pour l'instant, je mets check in onCreate:

m_bSkip = (this.getRequestedOrientation() != MyApp.sInstance.GetScreenOrientation());
if (m_bSkip)
  return;

Lorsque j'entre en création et que l'orientation de l'écran n'est pas souhaitée, quittez. Lorsque j'entre dans onCreate et que l'orientation de l'écran est souhaitée, continuez l'initialisation. Cela corrige la situation sans avoir besoin de conserver la tâche asynchrone liée à l'activité et de rechercher une nouvelle activité. Bien sûr, toutes les fonctions: onStart, onResume, onPausde, onStop ... doivent vérifier ce drapeau pour éviter une exception de pointeur nul.

0
Kostadin

Si vous souhaitez avoir une orientation fixe pour vos activités, vous pouvez utiliser-

Android: screenOrientation = "portrait"

Android:screenOrientation="sensorPortrait"

comme attribut à cette activité dans ce manifeste. Mais si vous souhaitez définir le temps d'exécution de l'orientation en fonction de l'orientation précédente lors du lancement de l'application, vous devez vérifier l'orientation précédente dans onCreate(), puis la définir par programmation elle-même à l'aide de setRequestedOrientation()

MISE À JOUR: Comme indiqué par @ s.co.tt, utilisez Android:screenOrientation="sensorPortrait" Pour un meilleur support sur les tablettes.

Pour plus de détails sur les différentes valeurs de Android:screenOrientation Et ce que chacune d'elles fait, consultez la documentation:

https://developer.Android.com/guide/topics/manifest/activity-element.html#screen

22
Rajkiran
<activity
            Android:name=".Android_mobile_infoActivity"
            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>
7
Android

Pour gérer les changements d'orientation, ajoutez la ligne suivante dans AndroidManifest.xml: Android:configChanges="orientation|screenSize" en dessous de <activity> tag comme indiqué ci-dessous: -

   <application
        Android:allowBackup="true"
        ----------
        ---------- >
        <activity Android:name=".MainActivity"
            Android:configChanges="orientation|screenSize">
        ----------
        </activity>
        ----------
    </application>

Remarque: chaque fois qu'il y a un changement dans la configuration tel que orientation, screenLayout, screenSize, etc., l'activité est redémarrée et sa méthode onCreate est appelée. Pour éviter cela, nous devons gérer toutes les modifications de configuration.

2
Sandeep Yohans

Faites-le par programme, par exemple dans une classe de base d'activité

J'ai essayé son mobile et sa tablette qui fonctionnent. utiliser n'importe qui portrait ou paysage.

@Override 
public void onCreate(Bundle savedInstanceState) {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   //or
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

manifest.xml à l'intérieur de la balise d'application

 <activity
        Android:name=".Login_Activity"
        Android:label="@string/app_name"
        Android:screenOrientation="portrait" />

ou

 <activity
        Android:name=".Login_Activity"
        Android:label="@string/app_name"
        Android:screenOrientation="landscape" />
1
Satheeshkumar Somu

D'après mon expérience, je recommanderais de définir setRequestedOrientation dans chaque activité de la méthode onCreate, onCreate ne sera plus appelé, c'est sûr.

0
Alexey A.

allez à Android Éditeur de manifeste, là-bas vous verrez MainActivity.Java cliquez dessus, à droite - vous verrez une nouvelle fenêtre: faites défiler vers le bas et choisissez sélectionnez l'orientation - "portrait"

0
ERJAN