Question

J'essaye de forcer le mode "portrait" pour mon application car mon application n'est absolument pas conçue pour le mode "paysage".

Après avoir lu certains forums, j'ai ajouté ces lignes dans mon fichier manifeste:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:screenOrientation="portrait">

Mais cela ne fonctionne pas sur mon appareil (HTC Desire).Il passe de "portrait" à "paysage", ignorant les lignes du fichier manifeste.

Après avoir lu d'autres forums, j'ai essayé d'ajouter ceci dans mon fichier manifeste:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:configChanges="orientation"       
  android:screenOrientation="portrait">

et cette fonction dans ma classe d'activité:

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Mais encore une fois, pas de chance.

Était-ce utile?

La solution

N'appliquez pas l'orientation à l'élément application , vous devez plutôt appliquer l'attribut à l'élément activity , et vous devez également définir configChanges comme indiqué ci-dessous.

/ p>

Exemple:

<activity
   android:screenOrientation="portrait"
   android:configChanges="orientation|keyboardHidden">
</activity>

Ceci est appliqué dans le fichier manifeste AndroidManifest.xml.

Autres conseils

Notez que

android:screenOrientation="portrait"     
android:configChanges="orientation|keyboardHidden"

est ajouté dans le fichier manifeste - où l'activité est définie.

Je pense que android:screenOrientation="portrait" peut être utilisé pour des activités individuelles.Utilisez donc cet attribut dans la balise <activity> comme:

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

Si vous avez beaucoup d'activités comme la mienne, dans votre application Ou si vous ne voulez pas entrer le code pour chaque balise d'activité dans le manifeste, vous pouvez le faire.

dans votre classe Application Base, vous obtiendrez un rappel de cycle de vie

Donc, fondamentalement, ce qui se passe pour chaque activité lors de la création du on create in Application Class est déclenché ici est le code ..

public class MyApplication extends Application{

@Override
    public void onCreate() {
        super.onCreate();  

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


// for each activity this function is called and so it is set to portrait mode


            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}

J'espère que cela vous aidera.

Définissez forcer le mode Portrait ou Paysage , ajoutez respectivement des lignes.

Importer sous la ligne:

import android.content.pm.ActivityInfo;

Ajouter la ligne ci-dessous juste au-dessus du setContentView(R.layout.activity_main);

Pour Portrait :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait

Pour Paysages :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape

Cela fonctionnera certainement.

Selon la documentation d'Android, vous devriez également souvent inclure screenSize comme possible changement de configuration.

android:configChanges="orientation|screenSize"

Si votre application cible le niveau d'API 13 ou supérieur (tel que déclaré par le minSdkVersion et targetSdkVersion), vous devez également déclarer la configuration "screenSize", car elle change également quand un l'appareil bascule entre les orientations portrait et paysage.

De plus, si vous incluez tous la valeur keyboardHidden dans vos exemples, ne devriez-vous pas aussi considérer locale, mcc, fontScale, keyboard et autres? ..

J'avais cette ligne dans mon AndroidManifest.xml

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name" android:name="Project Name"
    android:theme="@android:style/Theme.Black.NoTitleBar">

Ce que j'ai changé en (vient d'ajouter android:screenOrientation="portrait")

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name" android:name="Project Name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Black.NoTitleBar">

Cela a résolu les choses pour moi.

Quelque chose pour compléter: j'ai récemment mis à jour une application, la précédente fonctionnait à la fois en mode paysage et en mode portrait, et je souhaite que la version mise à jour fonctionne en mode portrait, j'ai donc ajouté

android:screenOrientation="portrait"

à l'activité correspondante, et il vient de planter lorsque j'ai testé la mise à jour.Puis j'ai ajouté

android:configChanges="orientation|keyboardHidden"

aussi, et ça marche.

Je pense que vous souhaitez ajouter un android:configChanges="orientation|keyboardHidden" à votre activité?Sinon, l'activité est redémarrée lors du changement de configuration.Le onConfigurationChanged ne serait pas appelé alors, seulement le onCreate

Si vous souhaitez prendre en charge différentes orientations dans les builds debug et release, écrivez-le (voir https://developer.android.com/studio/build/gradle-tips#share-properties-with-the-manifest ).

Dans build.gradle de votre dossier app, écrivez:

android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "fullSensor"]
        }
        release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "portrait"]
        }
    }
}

Ensuite, dans AndroidManifest, vous pouvez utiliser cette variable "orientation" dans n'importe quel Activity:

<activity
    android:name=".LoginActivity"
    android:screenOrientation="${orientation}" />

Vous pouvez ajouter un android:configChanges:

manifestPlaceholders = [configChanges: "", orientation: "fullSensor"] dans debug et manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"] dans la version,

<activity
    android:name=".LoginActivity"
    android:configChanges="${configChanges}"
    android:screenOrientation="${orientation}" />

Réponse courte: Ne le faites pas.

Reconcevez votre application afin qu'elle puisse fonctionner en mode portrait et paysage. Il n'existe pas d'interface utilisateur qui ne puisse pas être conçue pour fonctionner à la fois en mode portrait et en paysage; seulement des développeurs paresseux ou sans imagination.

La raison en est assez simple. Vous voulez que votre application soit utilisable par un public aussi large que possible sur autant d'appareils différents que possible. En forçant une orientation d'écran particulière, vous empêchez votre application de s'exécuter (de manière utilisable) sur des appareils qui ne prennent pas en charge cette orientation et vous frustrez et aliénez les clients potentiels qui préfèrent une orientation différente.

Exemple: vous concevez votre application pour forcer le mode portrait. Un client télécharge l'application sur un appareil 2 en 1 qu'il utilise principalement en mode paysage.
Conséquence 1: votre application est inutilisable ou votre client est obligé de détacher son appareil, de le faire pivoter et de l'utiliser dans une orientation qui ne lui est ni familière ni confortable.
Conséquence 2: le client est frustré par la conception non intuitive de votre application et trouve une alternative ou abandonne complètement l'application.

Je me bats avec ça avec une application en ce moment et en tant que consommateur et développeur, je déteste ça. Aussi utile que soit l'application, aussi fantastique que soient les fonctionnalités qu'elle offre, je déteste absolument l'application car elle m'oblige à utiliser une orientation qui va à l'encontre de toutes les autres façons dont j'utilise mon appareil.

Vous ne voulez pas que vos clients détestent votre application.


Je sais que cela ne répond pas directement à la question, je veux donc l'expliquer un peu plus en détail pour ceux qui sont curieux.

Les développeurs ont tendance à être vraiment bons en écriture de code et vraiment mauvais en conception. Cette question, même si cela ressemble à une question de code et que le demandeur a certainement l'impression que c'est une question de code, est en réalité une question de conception.

La question est vraiment "Dois-je verrouiller l'orientation de l'écran dans mon application?" Le demandeur a choisi de concevoir l'interface utilisateur pour qu'elle fonctionne et ne paraisse bien qu'en mode portrait. Je soupçonne que c'était pour gagner du temps de développement ou parce que le flux de travail de l'application est particulièrement propice à une mise en page portrait (courant pour les jeux mobiles). Mais ces raisons négligent tous les vrais facteurs importants qui motivent une conception appropriée.

  1. Engagement client: vous voulez que vos clients se sentent attirés par votre application, et non exclus de celle-ci. L'application doit passer en douceur de tout ce que votre client faisait avant d'ouvrir votre application. (C'est la raison pour laquelle la plupart des plates-formes ont des principes de conception cohérents, de sorte que la plupart des applications se ressemblent plus ou moins bien qu'elles ne soient pas obligées de le faire.)

  2. Réponse du client: vous voulez que vos clients réagissent positivement à votre application. Ils devraient en profiter. Même s'il s'agit d'une application de paie pour le travail, ce devrait être un plaisir pour eux de l'ouvrir et de pointer. L'application devrait faire gagner du temps à vos clients et réduire leur frustration face aux alternatives. (Les applications qui agacent les utilisateurs créent un ressentiment contre votre application qui se transforme en ressentiment contre votre marque.)

  3. Conversion de clients - vous voulez que vos clients puissent passer rapidement et facilement de la navigation à l'interaction. C'est l'objectif ultime de toute application: convertir les impressions en revenus. (Les applications qui ne génèrent pas de revenus sont une perte de temps à créer, d'un point de vue commercial.)

Une interface utilisateur mal conçue réduit l'engagement et la réponse des clients, ce qui entraîne une baisse des revenus. Dans un monde centré sur le mobile (et en particulier sur le sujet des modes d'affichage portrait / paysage), cela explique pourquoi la conception Web réactive est si importante. Walmart Canada a introduit la conception adaptative sur leur site Web en novembre 2013 et a enregistré une augmentation de 20% du taux de conversion des clients. O'Neill Clothing a mis en œuvre la réactivité

conception de eb et revenusdes clients utilisant des appareils iOS ont augmenté de 101,25% et de 591,42% pour les clients utilisant des appareils Android .

Les développeurs ont également tendance à se concentrer intensément sur la mise en œuvre d'une solution particulière (comme le verrouillage de l'orientation de l'affichage), et la plupart des développeurs de ce site seront ravis d'aider à mettre en œuvre cette solution, sans se demander si c'estmême la meilleure solution au problème.

Verrouiller l'orientation de votre écran est l'équivalent de la conception de l'interface utilisateur de l'implémentation d'une boucle do-while.Êtes-vous vraiment sûr de vouloir procéder de cette façon ou y a-t-il une meilleure alternative?

Ne forcez pas votre application dans un mode d'affichage unique.Investissez du temps et des efforts supplémentaires pour le rendre réactif.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top